Copyright: Borland C++Builder by Borland International


Globale Variablen

Borland C++ Compiler stellen Ihnen für viele allgemeine Standardgrößen vordefinierte globale Variablen wie Kalenderdatum und Uhrzeit, Kommandozeilenparameter usw. zur Verfügung.

8087	_osminor
_argc	_osversion
_argv	_sys_errlist
_ctype	_sys_nerr
_daylight	_threadid
_doserrno	_ _throwExceptionName
_environ	_ _throwFileName
_errno	_ _throwLineNumber
_floatconvert	_timezone
_fmode	_tzname
_new_handler	_wtzname
_osmajor	_version


_8087

Portabilität	Globale Variablen

Syntax

extern int _8087;

Header-Datei

dos.h

Beschreibung

Diese Variable wird durch die automatische Erkennung des Startcodes auf einen Wert ungleich 0 gesetzt, wenn ein installierter mathematischer Gleitkomma-Koprozessor erkannt wurde:

_8087	Mathematischer

Wert	Koprocessor

1    	8087

2    	80287

3    	80387

0    	(nicht erkannt)

Die automatische Erkennungslogik kann außer Kraft gesetzt werden, indem der Umgebungsvariablen 87 der Wert YES oder NO zugewiesen wird. (Die Befehle hierzu sind: SET 87=YES oder SET 87=NO; vor und nach dem Gleichheitszeichen darf dabei kein Leerzeichen stehen.) Ist die Umgebungsvariable korrekt gesetzt, so wird die globale Variable _8087 entsprechend gesetzt.


_argc

Portabilität	Beispiel	Globale Variablen

Syntax

extern int _argc;

Header-Datei

dos.h

Beschreibung

_argc enthält die als argc an main übergebene Anzahl der Kommandozeilenparameter.


Beispiel für _argc und _argv
/* Beispiel für _argc und _argv example */

#include <iostream.h>

#include <dos.h>     // Globale _arg-Werte holen

void func() {

   cout << "argc= " << _argc << endl;

   for (int i = 0; i < _argc; ++i)

      cout << _argv[i] << endl;

   }

void main(int argc, char ** argv) {

   func(); // DIESE FUNKTION KENNT ALLE ARGUMENTE VON main()

   }


_argv, _wargv

Portabilität	Beispiel	Globale Variablen

Syntax

extern char **_argv;

extern wchar t ** _wargv

Header-Datei

dos.h

Beschreibung

_argv zeigt auf ein Array mit den einzelnen Kommandozeilenparametern, die main beim Programmstart als Elemente von argv[] übergeben wurden.

_wargv ist die Unicode-Version von _argv.


_ctype

Portabilität	Globale Variablen

Syntax

extern char _ctype[];

Header-Datei

ctype.h

Beschreibung

_ctype ist ein Array mit Zeichenattributinformationen. Der Index ist der ASCII-Wert + 1. Jeder Eintrag ist ein Satz von Bits, die das Zeichen beschreiben. Dieses Array wird nur von Routinen verwendet, die von der Locale-Einstellung "C" betroffen sind (wie etwa isdigit, isprintusw.).


_daylight

Siehe auch	Portabilität	Globale Variablen

Syntax

extern int _daylight;

Header-Datei

time.h

Beschreibung

Die Variable wird zusammen mit den Funktionen für Uhrzeit und Datum verwendet. _daylight muß von tzset, ftime oder localtime auf den Wert 1 gesetzt werden, wenn die Sommerzeit berücksichtigt werden soll; 0 steht für die Standardzeit.

Unter Win32 wird der Wert von _daylight vom Betriebssystem zur Verfügung gestellt.


_environ, _wenviron

Siehe auch	Portabilität	Globale Variablen

Syntax

extern char ** _environ;

extern wchar t ** _wenviron

Header-Datei

dos.h

Beschreibung

Die Variable _environ ist ein Array von Zeigern auf Strings, über die Umgebungsvariablen des Betriebssystems gelesen und geändert werden können. Jeder String hat die Form

U_Var = Wert

wobei U_Var der Name einer Umgebungsvariable (wie z.B. PATH) und Wert der Stringwert (wie z.B. C:\BIN;C:\DOS) ist, der U_Var zugewiesen wird. Der String Wert kann auch leer sein.

Beim Start eines Programms werden die Umgebungsvariablen des Betriebssystems direkt an das Programm übergeben. Der Inhalt von env, dem dritten Parameter von main, stimmt mit dem Anfangswert von _environ überein.

Auf das Array der Umgebungsvariablen kann auch über getenv zugegriffen werden. Für Änderungen, Löschungen oder Hinzufügungen von Umgebungsvariablen sollten Sie jedoch ausschließlich die Funktion putenv verwenden, da sich die Größe und die Adresse des Array ändern kann, _environ jedoch automatisch angepaßt wird und stets auf das Array zeigt.


errno

Portabilität	Beispiel	Globale Variablen

Syntax

extern int errno;

Header-Datei

errno.h

Beschreibung

_errno wird von perror bei der Ausgabe von Fehlermeldungen verwendet, wenn bei der Ausführung bestimmter Bibliotheksroutinen ein Fehler aufgetreten ist.

Bei einem Fehler nach dem Aufruf einer mathematischen Funktion oder einer Systemfunktion wird errno gesetzt, um den Fehlertyp anzuzeigen. Manchmal sind _errno und _doserrno äquivalent, in anderen Fällen enthält _errno, anders als _doserrno, nicht den aktuellen Fehlercode des Betriebssystems. Andererseits setzen bestimmte Fehler nur errno, nicht aber _doserrno.


Beispiel für errno, _doserrno, _sys_errlist und _sys_nerr
/* Beispiel für errno, _doserrno, _sys_errlist und _sys_nerr */

/* Anzeigen der Systemfehler. */

#include <errno.h>

#include <stdio.h>

extern char *_sys_errlist[];

main()

{

   int i = 0;

   while(_sys_errlist[i++]) printf("%s\n", _sys_errlist[i]);

   return 0;

}


_doserrno

Portabilität	Beispiel	Globale Variablen

Syntax

extern int _doserrno;

Header-Datei

errno.h

Beschreibung

 _doserrno bildet viele Fehlercodes des Betriebssystems auf errno ab; _doserrno wird von perror aber nicht direkt benutzt.

 Wenn ein Systemaufruf des Betriebsystems mit einem Fehler endet, wird der entsprechende Fehlercode in _doserrno gespeichert. Die zusätzlich und gleichzeitig mitgeführte Fehlervariable errno stammt von UNIX.

In der folgenden Liste finden Sie die DOS-Fehlercodes, auf die _doserrno gesetzt werden kann. (Dieser _doserrno-Wert kann teilweise über errno auf eine äquivalente Fehlermeldung in _sys_errlist abgebildet werden)

Konstante	DOS-Fehlercode

E2BIG	Argumentenliste zu lang

EACCES	Zugriff verweigert

EACCES	Ungültiger Wert für Zugriff

EACCES	Ist eingestelltes Verzeichnis

EBADF	Handle nicht definiert

EFAULT	Reserviert

EINVAL	Ungültige Daten

EINVAL	Ungültige Funktion

EMFILE	Zu viele offene Dateien

ENOENT	Datei/Verzeichnis nicht gefunden

ENOEXEC	exec-Formatfehler

ENOMEM	MCB zerstört

ENOMEM	Nicht genügend Speicherplatz

ENOMEM	Speicherblock-Adresse ungültig

EXDEV	Ungültige Laufwerksangabe

EXDEV	Ziel- und Quell-Laufwerk verschieden

Weitere Informationen über die DOS-Fehlercodes finden Sie im DOS Referenzhandbuch.


_sys_errlist

Portabilität	Beispiel	Globale Variablen

Syntax

extern char * _sys_errlist[ ];

Header-Datei

errno.h

Beschreibung

_sys_errlist wird von perror bei der Ausgabe von Fehlermeldungen verwendet, wenn bei der Ausführung einer Bibliotheksroutine ein Fehler aufgetreten ist.

Das Array mit den Strings, die die Fehlermeldungen enthalten, steht Ihnen über die Variable _sys_errlist zur Verfügung und erleichtert Ihnen so die Formatierung von Meldungen. Benutzen Sie errno als Index in dieses Array, um den zur aktuellen Fehlernummer gehörenden String aufzufinden. Diese Strings enthalten keine Zeilenvorschubzeichen (\n).

In der folgenden Tabelle finden Sie die in _sys_errlist gespeicherten Werte. Um das Lesen zu erleichtern, ist die Liste alphabetisch sortiert. Die numerische Reihenfolge finden Sie in der Header-Datei errno.h.

Konstante	16-bit Bedeutung	32-bit Bedeutung

E2BIG 	Argumentliste zu lang	Argumentliste zu lang

EACCES 	Zugriff verweigert	Zugriff verweigert

EBADF 	Ungültige Dateinummer	Ungültige Dateinummer

ECHILD	Kein untergeordneter Prozeß

ECONTR 	Speicher-Kontrollblock zerstört	Speicher-Kontrollblock zerstört

ECURDIR 	Löschversuch des Arbeitsverzeichnisses	Löschversuch des Arbeitsverzeichnisses

EDEADLOCK	Versuch mehrfacher Sperrung

EDOM 	Argument außerhalb des Rechenbereichs	Argument außerhalb des Rechenbereichs

EEXIST 	Datei existiert bereits	Datei existiert bereits

EFAULT 	Unbekannter Fehler	Unbekannter Fehler

EINTR	Unterbrechung eines Funktionsaufrus

EINVACC 	Ungültiger Zugriffscode 	Ungültiger Zugriffscode

EINVAL 	Ungültiges Argument 	Ungültiges Argument

EINVDAT 	Ungültige Daten	Ungültige Daten

EINVDRV 	Ungültiges Laufwerk angegeben	Ungültiges Laufwerk angegeben

EINVENV 	Ungültige Umgebung	Ungültige Umgebung

EINVFMT 	Ungültiges Format	Ungültiges Format

EINVFNC 	Ungültige Funktionsnummer	Ungültige Funktionsnummer

EINVMEM 	Ungültige Speicherblockadresse	Ungültige Speicherblockadresse

EIO	Ein-/Ausgabefehler

EMFILE 	Zu viele offene Dateien	Zu viele offene Dateien

ENAMETOOLONG	Dateiname zu lang

ENFILE	Zu viele Dateien gleichzeitig geöffnet

ENMFILE 	Keine weiteren Dateieinträge	Keine weiteren Dateieinträge

ENODEV 	Unbekanntes Gerät	Unbekanntes Gerät

ENOENT 	Datei/Verzeichnis nicht gefunden	Datei/Verzeichnis nicht gefunden

ENOEXEC 	exec-Formatfehler	exec-Formatfehler

ENOFILE	Datei/Verzeichnis nicht gefunden	Datei/Verzeichnis nicht gefunden

ENOMEM	Nicht genügen Speicherplatz	Nicht genügen Speicherplatz

ENOPATH	Pfad nicht gefunden	Pfad nicht gefunden

ENOSPC	Nicht genügend Speierplatz auf externem Medium

ENOTSAM 	Nicht dasselbe Gerät	Nicht dasselbe Gerät

ENXIO	Unbekanntes Gerät bzw. ungültige Adresse

EPERM	Unerlaubte Operation

EPIPE	Unterbrochene Pipe

ERANGE	Ergebnis außerhalb des Rechenbereichs	Ergebnis außerhalb des Rechenbereichs

EROFS	Dateisystem nur zum Lesen

ESPIPE	Ungültige Suche

EXDEV 	RENAME kann nicht kopieren	RENAME kann nicht kopieren

EZERO	Kein Fehler	Kein Fehler

Weitere Informationen über die DOS-Fehlercodes finden Sie im DOS Referenzhandbuch.


_sys_nerr

Portabilität	Beispiel	Globale Variablen

Syntax

extern int _sys_nerr;

Header-Datei

errno.h

Beschreibung

_sys_nerr wird von perror bei der Ausgabe von Fehlermeldungen verwendet, wenn bei der Ausführung einer Bibliotheksroutine ein Fehler aufgetreten ist.

Diese Variable enthält die Anzahl der Fehlermeldungs-Strings in _sys_errlist.


_floatconvert

Portabilität	Beispiel	Globale Variablen

Syntax

extern int _floatconvert;

Header-Datei

stdio.h

Beschreibung

Die Ausgabe von Gleitkommawerten macht das Linken der von printf, scanf etc. verwendeten Konvertierungsroutinen erforderlich. Zur Verringerung der Programmgröße werden diese Konvertierungsroutinen nicht automatisch gelinkt. Dies geschieht nur dann, wenn Ihr Programm eine mathematische Routine benutzt oder die Adresse einer Gleitkommazahl ausgewertet wird. Ist beides nicht der Fall, dann können die fehlenden Konvertierungsroutinen zu einem Laufzeitfehler führen.


Beispiel für _floatconvert
/* Beispiel für _floatconvert */

/* VORBEREITUNG DER AUSGABE VON FLIESSKOMMAZAHLEN. */

#include <stdio.h>

#pragma extref _floatconvert

void main() {

  printf("d = %lf\n", 1);

}


_fmode

Portabilität	Globale Variablen

Syntax

extern int _fmode;

Header-Datei

fcntl.h

Beschreibung

_fmode legt fest, ob Dateien im Text- oder im Binärmodus geöffnet und übersetzt werden. Die Voreinstellung für _fmode ist O_TEXT, wodurch Dateien im Textmodus gelesen werden. Um Dateien im Binärmodus zu öffnen und zu lesen, muß _fmode auf O_BINARY gesetzt werden. (Die Konstanten O_TEXT und O_BINARY sind in fcntl.h definiert.)

Im Textmodus werden bei der Eingabe CR/LF-Kombinationen (Wagenrücklauf/Zeilenvorschub) in ein einzelnes LF-Zeichen übersetzt. Bei der Ausgabe werden umgekehrt einzelne LF-Zeichen in CR/LF-Kombinationen übersetzt.

Im Binärmodus findet keine derartige Umsetzung statt.

Der durch _fmode voreingestellte Modus kann durch Angabe eines t (für Textmodus) oder b (für Binärmodus) als Parameter type bei den Bibliotheksfunktionen fopen, fdopen und freopen geändert werden. Auch beim Aufruf der Funktion open kann durch Angabe einer der beiden Konstanten O_BINARY oder O_TEXT im Parameter access Binärmodus bzw. Textmodus für die zu öffnende Datei explizit gewählt werden.


_new_handler

Portabilität	Globale Variablen

Syntax

typedef void (*pvf)();

pvf _new_handler;

Header-Datei

new.h

Beschreibung

_new_handler beinhaltet einen Zeiger auf eine Funktion, der keine Parameter übergeben werden und die einen Rückgabewert vom Typ void hat. Wenn der Operator new() den benötigten Speicherplatz nicht reservieren kann, wird die Funktion aufgerufen, auf die _new_handler zeigt. Nach der Rückkehr von dieser Funktion wird erneut versucht, den Speicherplatz zu reservieren. Per Voreinstellung weist _new_handler auf eine Funktion, die das Programm beendet. Das Programm kann diesen Handler durch eine Funktion ersetzen, die versucht, Speicherplatz freizugeben. Dies kann über eine direkte Zuweisung an _new_handler oder durch den Aufruf der Funktion _set_new_handler geschehen. set_new_handler liefert einen Zeiger auf den früheren Handler zurück.

Alternativ können Sie auch die Funktion set_new_handler wie folgt verwenden:

pvf set_new_handler(pvf p);

_new_handler  wird primär aus Kompatibilitätsgründen zur C++ Version 1.2 bereitgestellt. In den meisten Fällen erreicht man diese Funktionalität besser durch Überladen des Operators new().


_osmajor

Siehe auch	Portabilität	Globale Variablen

Syntax

extern unsigned char _osmajor;

Header-Datei

dos.h

Beschreibung

_osmajor beinhaltet die Hauptversionsnummer des Betriebssystems. Bei Verwendung der DOS-Version 3.2 ist beispielsweise der Wert von _osmajor auf 3 gesetzt.

Diese Variablen sind hilfreich, wenn Module unter DOS-Versionen 2.x und 3.x laufen soll. Einige Bibliotheksfunktionen verhalten sich in Abhängigkeit von der DOS-Versionsnummer unterschiedlich, andere funktionieren nur unter DOS 3.x und höher. Vergleichen Sie hierzu beispielsweise die Beschreibungen von creatnew und rtl_open..


_osminor

Siehe auch	Portabilität	Globale Variablen

Syntax

extern unsigned char _osminor;

Header-Datei

dos.h

Beschreibung

_osminor beinhaltet die Nebenversionsnummer des Betriebssystems. Bei Verwendung der DOS-Version 3.2 ist beispielsweise der Wert von _osminor auf 20 gesetzt.

Diese Variablen sind hilfreich, wenn Module unter DOS-Versionen 2.x und 3.x laufen soll. Einige Bibliotheksfunktionen verhalten sich in Abhängigkeit von der DOS-Versionsnummer unterschiedlich, andere funktionieren nur unter DOS 3.x und höher. Vergleichen Sie hierzu beispielsweise die Beschreibungen von creatnew und rtl_open.


_osversion

Siehe auch	Portabilität	Globale Variablen

Syntax

extern unsigned _osversion;

Header-Datei

dos.h

Beschreibung

_osversion enthält die Nummer der Betriebssystemversion, die Hauptversionsnummer im höherwertigen Byte und die Nebenversionsnummer im niederwertigen Byte. Bei der DOS-Version x.y ist x die Haupt- und y die Nebenversionsnummer.

_osversion besitzt die gleiche Funktionalität wie _version.


_ _throwExceptionName

Siehe auch	Portabilität	Globale Variablen

Syntax

extern char * _ _throwExceptionName;

Header-Datei

except.h

Beschreibung

Diese globale Variable wird verwendet, um den Namen einer ausgelösten Exception zu ermitteln. Jede Variable enthält einen druckbaren String.


_ _throwFileName

Siehe auch	Portabilität	Globale Variablen

Syntax

extern char * _ _throwFileName;

Header-Datei

except.h

Beschreibung

Diese globale Variable wird verwendet, um den Namen einer ausgelösten Exception zu ermitteln. Die Variable enthält einen druckbaren String.

Damit der Dateiname über __throwFileName ermittelt werden kann, muß das Modul mit der Compiler-Option -xp compiliert werden.


_ _throwLineNumber

Siehe auch	Portabilität	Globale Variablen

Syntax

extern char * _ _throwLineNumber;

Header-Datei

except.h

Beschreibung

Diese globale Variable wird verwendet, um die Position einer ausgelösten Exception zu ermitteln. Die Variable enthält einen druckbaren String.

Damit die Zeilennummer mit der Hilfe von __throwLineNumber ermittelt werden kann, muß das Modul mit der Compiler-Option -xp compiliert werden.


_threadid

Portabilität	Globale Variablen

Syntax

extern long _threadid;

Header-Datei

stddef.h

Beschreibung

_threadid ist ein Integer-Wert vom Typ long und enthält die ID des aktuell ausgeführten Thread. _threadid ist als Makro implementiert und sollte nur durch Einbinden der Header-Datei stddef.h deklariert werden.


_timezone

Siehe auch	Portabilität	Globale Variablen

Syntax

extern long _timezone;

Header-Datei

time.h

Beschreibung

Die Variable _timezone wird von den Funktionen für Uhrzeit und Datum verwendet und von der Funktion tzset berechnet. _timezone ist ein long-Wert, der den Unterschied zwischen der Greenwich Mean Time und der lokalen Zeit in Sekunden wiedergibt.

Unter Win32 wird der Wert von _timezone vom Betriebssystem zur Verfügung gestellt.


_tzname
_tzname, _wtzname

Siehe auch	Portabilität	Globale Variablen

Syntax

extern char * _tzname[2]

extern wchar_t *const _wtzname[2]

Header File

time.h

Beschreibung

Die globale Variable tzname ist ein Array von Zeigern auf Strings, die Abkürzungen von Zeitzonennamen enthalten. tzname[0] zeigt auf einen String mit drei Zeichen, der den Zeitzonennamen aus der Umgebungsvariable TZ enthält. tzname[1] zeigt auf einen String mit drei Zeichen, der den Zeitzonennamen der Sommerzeit aus der Umgebungsvariable TZ enthält. Wenn die Sommerzeit-Konvertierung nicht benutzt wird, zeigt tzname[1] auf einen leeren String.

Unter Win32 wird der Wert von _tzname vom Betriebssystem zur Verfügung gestellt.


_version

Siehe auch	Portabilität	Globale Variablen

Syntax

extern unsigned _version;

Header-Datei

dos.h

Beschreibung

_version enthält die Nummer der Betriebssystemversion, die Hauptversionsnummer im höherwertigen Byte und die Nebenversionsnummer im niederwertigen Byte. Bei der DOS-Version x.y ist x die Haupt- und y die Nebenversionsnummer.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	+	 	+	+	 	 	+


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	+	 	+	+


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	+	 	 	+	 	 	+


Die Funktion main()

Siehe auch

Jedes C oder C++ Programm muß eine Programmstartfunktion besitzen.

Programme, die im Textbildschirmmodus arbeiten, rufen die Funktion main beim Programmstart auf.

Programme mit der grafischen Benutzeroberfläche Windows rufen beim Programmstart die Funktion WinMain auf.

An welcher Stelle die Funktion main steht - ob am Anfang der Datei oder am Ende - bleibt dem Programmierer überlassen. Unabhängig von der Position der Funktion main sind aber immer die folgenden Punkte zu beachten.

Argumente zu Main

Platzhalter-Argumente

Verwendung von -p (Pascal-Aufrufkonventionen)

Rückgabewerte von main( )


Argumente zu main()

Die Funktion main()	Beispiel

Drei Parameter (Argumente) werden von der Borland C++ Programmstartroutine an main übergeben: argc, argv und env.

argc ist eine Ganzzahl und gibt die Anzahl der an main übergebenen Kommandozeilenargumente an, einschließlich des Namens des ausführbaren Programms selbst.

argv ist ein Array von Zeigern auf Strings (char *[]).

-	argv[0] ist der vollständige Pfadname des laufenden Programms.

-	argv[1] zeigt auf den ersten String nach dem Programmnamen, der in der Kommandozeile des Betriebssystems eingegeben wurde.

-	argv[2] zeigt auf den zweiten String, der nach dem Programmnamen eingegeben wurde.

-	argv[argc-1] zeigt auf das letzte an main übergebene Argument.

-	argv[argc] enthält NULL.

env ist ebenfalls ein Array von Zeigern auf Strings. Jedes Element von env[] enthält einen String der Form ENVVAR=Wert.

-	ENVVAR ist der Name einer Umgebungsvariablen, wie etwa PATH oder COMSPEC.

-	Wert ist der Wert, auf den ENVVAR gesetzt ist, wie beispielsweise C:\APPS;C:\TOOLS; (für PATH) oder C:\DOS\COMMAND.COM (für COMSPEC).

Bei der Deklaration dieser Parameter muß die exakte Reihenfolge eingehalten werden: argc, argv, env. So sind beispielsweise sämtliche folgenden Deklarationen von Argumenten zu main gültig:

int main()

int main(int argc)                 /* erlaubt, aber sehr ungewöhnlich */

int main(int argc, char * argv[])

int main(int argc, char * argv[], char * env[])]

Die Deklaration int main(int argc) ist zulässig; es ist jedoch sehr ungewöhnlich, argc in einem Programm zu verwenden, ohne zugleich die Argumente von argv zu benutzen.

Das Argument env ist auch über die globale Variable  environ. verfügbar.

In allen Umgebungen sind argc und argv ebenfalls über die globalen Variablen _argc und _argv. verfügbar.


Beispiel für die Übergabe von Argumenten an main( )

Dieses Beispiel zeigt ein einfaches Verfahren, wie die an main übergebenen Argumente verwendet werden:

/* Programm ARGS.C */

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[], char *env[]) {

   int i;

   printf("Der Wert von argc ist %d \n\", argc);

   printf("Dies sind die %d Kommandozeilen-Parameter, übergeben an"

          " main:\n\n", argc);

   for (i = 0; i < argc; i++)

      printf("   argv[%d]: %s\n", i, argv[i]);

   printf("\nDie Umgebungsvariable(n) auf diesem System sind:\n\n");

   for (i = 0; env[i] != NULL; i++)

      printf("   env[%d]: %s\n", i, env[i]);

   return 0;

   }

Angenommen, ARGS.EXE wird an der Eingabeaufforderung mit der folgenden Befehlszeile ausgeführt:

   C:> args Erstes_Arg "Leeres Argument" 3  4 "Vorletztes" Stop!

Argumente mit eingebetteten Leerzeichen können übergeben werden, wenn sie in Anführungszeichen eingeschlossen werden, wie die Beispiele "arg mit Leerzeichen" und "vorletztes arg" in dieser Beispiel-Kommandozeile zeigen.

Die Ausgabe von ARGS.EXE (wenn die Umgebungsvariablen wie im Beispiel gesetzt sind) wird dann so aussehen:

Der Wert von argc ist 7

Dies sind die 7 Kommandozeilen-Parameter, uebergeben an main:

   argv[0]: C:\BC5\ARGS.EXE

   argv[1]: Erstes_Arg

   argv[2]: Leeres Argument

   argv[3]: 3

   argv[4]: 4

   argv[5]: Vorletztes

   argv[6]: Stop!

Die Umgebungsvariable(n) auf diesem System lauten

   env[0]: COMSPEC=C:\COMMAND.COM

   env[1]: PROMPT=$p $g

   env[2]: PATH=C:\SPRINT;C:\DOS;C:\BC4

Die maximale Gesamtlänge der an main übergebenen Kommandozeilenargumente (einschließlich der Leerzeichen zwischen benachbarten Argumenten und dem Programmnamen selbst) beträgt

128 für DOS

260 für Win16

255 für Win32


Platzhalter-Argumente

Die Funktion main()	Beispiel

Kommandozeilenargumente, die Platzhalter (wildcards) enthalten, können zu allen passenden Dateinamen expandiert werden. Das Verfahren ähnelt der DOS-Expansion von Platzhaltern zum Beispiel bei dem Befehl COPY. Um Platzhalter zu expandieren, muß nur das Programm mit der Objektdatei WILDARGS.OBJ, die zum Lieferumfang von Borland C++ gehört, gelinkt werden.

Hinweis:	Platzhalterargumente werden nur in Anwendungen für den Textbildschirmmodus verwendet.

Sobald WILDARGS.OBJ mit dem Programm-Code gelinkt wurde, können Platzhalter-Argumente (wie z.B. *.* ) an die Funktion main übergeben werden. Das Argument wird auf alle Dateien (im argv-Array) angewandt, die mit der Platzhalter-Maske übereinstimmen. Die maximale Größe des argv-Array hängt von dem auf dem Heap verfügbaren Speicher ab.

Werden keine passenden Dateien gefunden, wird das Argument unverändert übergeben. (Das heißt, eine Zeichenkette, die aus der Platzhaltermaske besteht, wird an main übergeben.)

In Anführungszeichen eingeschlossene Argumente ("...") werden nicht expandiert.


Beispiel für die Verwendung von Platzhalter-Argumenten mit main( )

Die folgenden Befehle kompilieren die Datei ARGS.C und linken sie mit dem Platzhalter-Expansions-Modul WILDARGS.OBJ. Das entstandene ausführbare Programm ARGS.EXE wird anschließend ausgeführt:

BCC  ARGS.C  WILDARGS.OBJ

ARGS  C:\BC5\INCLUDE\*.H  "*.C"

Bei der Ausführung von ARGS.EXE wird das erste Argument auf die Namen aller *.H-Dateien im Borland C++ INCLUDE-Verzeichnis angewandt. Es ist darauf zu achten, daß die expandierten Argument-Strings den vollständigen Pfad enthalten. Das Argument *.C wird nicht expandiert, da es in Anführungszeichen eingeschlossen ist.

Soll die Platzhalter-Expansion als Voreinstellung zur Verfügung stehen, müssen die Standard-Bibliotheksdatein CW32?.LIB angepaßt werden, damit WILDARGS.OBJ automatisch gelinkt wird. Dazu werden SETARGV und INITARGS aus den Bibliotheken entfernt und WILDARGS hinzugefügt. Die folgenden Befehle veranlassen die Turbo-Bibliotheksverwaltung (TLIB), alle Standard-Bibliotheksdateien anzupassen (vorausgesetzt, daß das aktuelle Verzeichnis die Standard-C und C++ Bibliotheken sowie WILDARGS.OBJ enthält):

Windows-Benutzer:

tlib  CW32        -setargv  +wildargs

tlib  CW32MT      -setargv  +wildargs

tlib  -setargv    +wildargs


Verwendung von --p (Pascal-Aufrufkonventionen)
Verwendung von -p (Pascal-Aufrufkonventionen)

Die Funktion main()

Bei der Compilierung von Programmen unter Verwendung der Pascal-Aufrufkonventionen muß main ausdrücklich als ein C-Typ deklariert werden. Dies geschieht mit dem Schlüsselwort __cdecl, wie in folgendem Beispiel:

   int  __cdecl main(int argc, char* argv[], char* envp[])


Rückgabewerte von main()

Die Funktion main()

Der von main zurückgegebene Wert ist der Status-Code des Programms, eine Ganzzahl. Verwendet das Programm zum Beenden jedoch die Routine exit (oder _exit), ist der Rückgabewert von main das an den Aufruf von exit (oder an _exit) übergebene Argument.

Enthält das Programm beispielsweise den Aufruf

exit(1)

ist der Status 1.


Übergabe von Datei-Informationen an untergeordnete Prozesse

Die Funktion main()

Wenn das Programm die Funktionen exec oder spawn benutzt, um einen neuen Prozeß zu erzeugen, erbt dieser normalerweise alle geöffneten Datei-Handles, die der ursprüngliche Prozeß erzeugt hat. Einige Informationen zu diesen Handles werden aber verlorengehen, zum Beispiel der Zugangsmodus, der zum Öffnen der Datei benutzt wird. Wenn beispielsweise das Programm eine Datei mit reiner Leseberechtigung und im Binärmodus öffnet und dann einen untergeordneten Prozeß erzeugt, kann letzterer die Datei durch Schreibzugriffe oder durch Lesezugriff im Textmodus beschädigen.

Um untergeordneten Prozessen das Erben solcher Informationen über geöffnete Dateien zu ermöglichen, muß das Programm mit der Objektdatei FILEINFO.OBJ gelinkt werden.

Zum Beispiel:

   BCC32 TEST.C \BCB\LIB\FILEINFO.OBJ

Die Datei-Information wird mit der Umgebungsvariablen _C_FILE_INFO übergeben. Diese Variable enthält kodierte Binärinformation. Das Programm sollte nicht versuchen, ihren Wert zu lesen oder zu ändern. Das untergeordnete Programm muß mit der C++ Laufzeitbibliothek erzeugt worden sein, um diese Informationen korrekt zu erben.

Andere Programme können _C_FILE_INFO ignorieren und erben keine Datei-Information.


Multithread-Programme

Siehe auch

32-Bit-Programme können mehr als einen Ausführungsstrang (thread) erzeugen. Falls das Programm mehrere Threads erzeugt und diese ebenfalls die C++ Laufzeitbibliothek verwenden, muß statt dessen die CW32MT.LIB oder CW32MTI -Bibliothek verwendet werden.

Die Multithread-Bibliotheken stellen die folgenden Funktionen zur Erzeugung von Threads zur Verfügung:

_beginthread

_beginthreadNT

Ebenfalls verfügbar sind

_endthread 	eine Funktion, die Threads beendet.

_threadid	eine globale Variable, die die aktuelle Kennungsnummer des Strangs (thread-ID) enthält.

Die Header-Datei stddef.h enthält die Deklarationen von _threadid.

Zum Compilieren oder Linken eines Programms, das mehrere Threads verwendet, muß der Compiler-Schalter -tWM  verwendet werden. Zum Beispiel:

   BCC32 -tWM THREAD.C

Hinweis:	Die signal-Funktion muß in Multithread-Programmen mit besonderer Vorsicht verwendet werden. Die Signale SIGINT, SIGTERM und SIGBREAK können in Nicht-Win32-Anwendungen nur von dem Haupt-Thread (Thread Eins) verwendet werden. Tritt eines dieser Signale auf, wird die Ausführung des aktuellen Threads vorübergehend gestoppt und die Steuerung an den Signal-Handler (sofern vorhanden), der durch den Threads Eins eingerichtet wurde, übergeben. Andere Signale können von beliebigen Threads behandelt werden.

Signal-Handler sollten nicht die Funktionen der C++ Laufzeitbibliothek verwenden, da ein Semaphor-Deadlock auftreten kann. Statt dessen sollte der Handler lediglich ein Flag setzen oder ein Semaphor ablegen und daraufhin direkt wieder zurückkehren.


WinMain

Siehe auch

Syntax

int PASCAL WinMain(HINSTANCE hCurInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

Beschreibung

Diese Funktion stellt den Haupteinsprungspunkt für eine Anwendung unter Windows dar. Sie muß vom Benutzer verfügbar gemacht werden.

Parameter 	Typ	Beschreibung

HINSTANCE	hCurInstance 	Das Instanzen-Handle der Anwendung. Jede Instanz einer Anwendung besitzt ein eigenes Instanzen-Handle. Es wird als Argument für verschiedene Windows-Funktionen benutzt sowie für die Unterscheidung zwischen mehreren Instanzen einer angegebenen Anwendung.

Hinstance	hPrevInstance 	Das Handle der vorangegangenen Instanz der Anwendung. Dieser Wert ist NULL, wenn dies die erste Instanz ist.

LPSTR 	lpCmdLine 	Ein FAR-Zeiger auf eine nullterminierte Kommandozeile. Dieser Wert muß angegeben werden, wenn die Anwendung über den Programm-Manager oder durch einen Aufruf an WinExec aktiviert wird.

int	nCmdShow	Eine Ganzzahl, die die Fensteranzeige der Anwendung festlegt. Dieser Wert ist an ShowWindow zu übergeben.

Unter Win32 gibt es zwei Unterschiede, die die mit Hilfe der Parameter über- und zurückgegebenen Werte betreffen:

hPrevInstance liefert immer NULL zurück.

lpCmdLine zeigt auf einen String, der die gesamte Befehlszeile (nicht nur die Parameter) enthält.

Rückgabewert

Der Rückgabewert von WinMain wird von der aktuellen Windows-Version nicht benutzt. Er ist jedoch nützlich beim Debuggen, da dieser Wert beim Beenden des Programms angezeigt werden kann.


Bibliotheksroutinen, nach Kategorien sortiert

Siehe auch	Überblick

Falls Sie den Namen der Funktion kennen, zu der Sie Hilfe benötigen, so wählen Sie:

Bibliotheksroutinen, nach Namen sortiert

Wenn Sie den Namen der Funktion nicht kennen, aber wissen, welche Art von Aktion damit ausgeführt wird, wählen Sie eine der folgenden Kategorien:

Klassifizierungsroutinen

Ein/Ausgaberoutinen für den Textbildschirm

Konvertierungsroutinen

Diagnose-Routinen

Verzeichnissteuerroutinen

Inline-Routinen

Ein-/Ausgaberoutinen

Bearbeitungsroutinen

Mathematische Routinen

Speicherroutinen

Verschiedene Routinen

Veraltete Funktionen

Ablaufsteuerungsroutinen

Zeit- und Datums-Routinen

Routinen für variable Argumentlisten


C++Builder besitzt mehrere hundert Klassen, Funktionen und Makros, die Sie innerhalb Ihrer C und C++ Programme aufrufen können. Damit können Sie eine große Anzahl von Aufgaben durchführen, eingeschlossen E/A-Funktionen auf Assembler- und Hochsprachenebene, String- und Dateimanipulationen, Speicherverwaltung, Prozeßsteuerung, Datenkonvertierung, mathematische Berechnungen und vieles mehr. Auf diese Klassen, Funktionen und Makros wird gemeinsam über Bibliotheksroutinen zugegriffen.


Überblick über Laufzeitbibliotheken

C++Builder besitzt einige hundert Klassen, Funktionen und Makros, die Sie in Ihren C- und C++-Programmen aufrufen können, um ein breites Spektrum an Aufgaben wie Low- und High-level-E/A, Zeichenketten- und Dateibearbeitung, Speicherverwaltung, Prozeßsteuerung, Datenkonvertierung, mathematische Berechnungen und vieles mehr zu bewältigen. Diese Klassen, Funktionen und Makros sind einheitlich unter dem Begriff Bibliotheksroutinen zusammengefaßt.

Die C++Builder-Laufzeitbibliotheken werden in statische (.OBJ und .LIB) und dynamische (.DLL) Linkversionen unterteilt.

Statische Bibliotheken sind im LIB-Unterverzeichnis Ihres Installationsverzeichnisses enthalten.

Dynamische Linkbibliotheken befinden sich im Unterverzeichnis BIN.

Von den Laufzeitbibliotheken sind verschiedenen Versionen verfügbar. So gibt es beispielsweise verschiedene Versionen zum Debuggen von Anwendungen sowie Versionen, die Delphi- und VCL-Unterstützung bieten oder die nur C und C++ Routinen enthalten.


Statische Laufzeitbibliotheken

Siehe auch	Überblick

Die nachfolgende Liste enthält die Namen aller statischen Bibliotheken von C++Builder, die jeweils dazu passende Betriebssystemumgebung sowie Hinweise zu ihrer Verwendung.

Dateiname	Verwendung

Verzeichnis BCB\LIB

BWCC32.LIB	32-Bit-Importbibliothek für BWCC32.DLL

C0D32.OBJ	32-Bit-DLL-Startup-Modul

C0W32.OBJ	32-Bit-GUI-EXE-Startup-Modul

C0X32.OBJ	32-Bit-Textbildschirmmodus-EXE-Startup-Modul

CP32MT.LIB	32-Bit-GUI-Multithread-Bibliothek mit VCL und Unterstützung für Delphi Exception-Handling

CW32MT.LIB	32-Bit-GUI-Multithread-Bibliothek

CW32MTI.LIB	32-Bit-Multithread-, GUI- und dynamische RTL-Importbibliothek für W3230MT.DLL

IMPORT32.LIB	32-Bit-Importbibliothek; enthält Winsock 1.x

INET.LIB	Importbibliothek für die Internet API (URLMON, WININET, HLINK, MSCONF, WEBPOST).

MSEXTRA.LIB	Importbibliothek für einige APIs, deren Modulnamen sich für NT und Win95 unterscheiden.

MSWSOCK.LIB 	Importbibliothek für MSWSOCK.DLL.

OBSOLETE.LIB	Stellt obsolete globale Variablen bereit.

OLE2W32.LIB 	Importbibliothek für die 32-Bit OLE 2.0 API.

RPCEXTRA.LIB	Importbibliothek für einige RPC APIs, deren Modulnamen sich für NT und Win95 unterscheiden.

TH32.LIB 	Importbibliothek für die 32-Bit ToolHelp API unter Win95.

VCL.LIB	Visuelle Komponentenbibliothek

VCLD.LIB 	Visuelle Komponentenbibliothek, Debug-Version

WS2_32.LIB 	Importbibliothek für die 32-Bit WinSock 2.0 API.

W32SUT32.LIB	Universelle 32-Bit-Thunk-Bibliothek

Verzeichnis BCB\LIB\RTL

FILES.C	Erhöht die Anzahl der Datei-Handles

FILES2.C 	Erhöht die Anzahl der Datei-Handles

FILEINFO.OBJ	Übergibt die Datei-Handle-Information zum Öffnen an untergeordnete Prozesse

GP.OBJ	Druckt beim Auftreten einer Exception die Register-Dump-Information

MATHERR.C	Beispiel für einen benutzerdefinierten mathematischen Exception-Handler für die Datentypen float und double

MATHERRL.C	Beispiel für einen benutzerdefinierten mathematischen Exception-Handler für den Datentyp long double

WILDARGS.OBJ	Wandelt Platzhalter-Argumente einer Textbildschirmanwendung in ein Array mit Argumenten an main() um


Dynamische Linkbibliotheken

Siehe auch	Überblick

Die DLL-Version (dynamic-link library) der Laufzeitbibliothek befindet sich im Unterverzeichnis BIN Ihres Installationsverzeichnisses. Die DLL-Versionen der statischen Bibliotheken bieten sowohl VCL-Unterstützung als auch Exception-Handling im Delphi-Stil.

Die nachfolgende Liste enthält die Namen aller DLLs von C++Builder, die jeweils dazu passende Betriebssystemumgebung sowie Hinweise zu ihrer Verwendung.

Verzeichnis BCB\BIN

Dateiname	Verwendung

CP3230MT.DLL	32-Bit, Multithread, GUI-Modus, Exception-Handling im Delphi-Stil und VCL-Unterstützung

CW3230MT.DLL	32-Bit, Multithread, GUI-Modus; keine Delphi- oder VCL-Unterstützung


Standard-Laufzeitbibliotheken

Siehe auch	Überblick

Die folgende Tabelle zeigt, welche Standard-Laufzeitbibliotheken von den einzelnen Compilern benutzt werden.

Compiler	Umgebung	Standard-Laufzeitbibliotheken
BCC32.EXE	Win32	C0W32.OBJ, CW32MT.LIB, IMPORTW32.LIB


Prototypisierte Routinen von C++

Siehe auch

Einige im Buch beschriebene Routinen haben mehrfache Deklarationen. Sie müssen den für Ihr Programm geeigneten Prototyp auswählen. Im allgemeinen sind die verschiedenen Prototypen erforderlich, um sowohl die originale C-Implementierung als auch die strengere und manchmal auch abweichende C++ Funktionsdeklarierungssyntax zu unterstützen. So haben beispielsweise einige Routinen zur String-Verarbeitung mehrere Prototypen, weil C++Builder zusätzlich zum spezifischen ANSI-C-Prototyp auch die Prototypen zur Verfügung stellt, die dem ANSI C++ Konzept entsprechen.

Funktion	Header

max	stdlib.h

memchr	string.h

min	stdlib.h

strchr	string.h

strpbrk	string.h

strrchr	string.h

strstr	string.h


Klassifizierungsroutinen

Siehe auch

Die folgenden Routinen klassifizieren ASCII-Zeichen als Buchstaben, Steuerzeichen, Interpunktionszeichen, Zeichen in Großschreibung usw.

Diese Routinen sind in ctype.h deklariert.

isalnum	islower

isalpha	isprint

isascii	ispunct

iscntrl	isspace

isdigit	isupper

isgraph	isxdigit


Ein-/Ausgaberoutinen für den Textbildschirm

Siehe auch

Die folgenden Routinen geben Text auf dem Bildschirm aus oder lesen Text von der Tastatur ein. In GUI-Anwendungen können sie nicht benutzt werden.

Funktion	Header	Funktion	Header

cgets	conio.h	movetext	conio.h

clreol	conio.h	normvideo	conio.h

clrscr	conio.h	putch	conio.h

cprintf	conio.h	puttext	conio.h

cputs	conio.h	_setcursortype	conio.h

delline	conio.h	textattr	conio.h

getpass	conio.h	textbackground	conio.h

gettext	conio.h	textcolor	conio.h

gettextinfo	conio.h	textmode	conio.h

gotoxy	conio.h	ungetc	stdio.h

highvideo	conio.h	wherex	conio.h

insline	conio.h	wherey	conio.h

lowvideo	conio.h	window	conio.h


Konvertierungsroutinen

Siehe auch

Diese Routinen konvertieren

alphanumerische Zeichen in unterschiedliche numerische Formen (Gleitkommazahlen, Ganzzahlen, long-Zahlen).

numerische in alphanumerische Formen.

Großbuchstaben in Kleinbuchstaben (und umgekehrt).

Funktion	Header	Funktion	Header

atof	stdlib.h	strtol	stdlib.h

atoi	stdlib.h	_strtold	stdlib.h

atol	stdlib.h	strtoul	stdlib.h

ecvt	stdlib.h	toascii	ctype.h

fcvt	stdlib.h	_tolower	ctype.h

gcvt	stdlib.h	tolower	ctype.h

itoa	stdlib.h	_toupper	ctype.h

_ltoa	stdlib.h	toupper	ctype.h

strtod	stdlib.h	ultoa	stdlib.h


Diagnose-Routinen

Siehe auch

Diese Routinen stellen die integrierten Funktionen zur Problembehebung zur Verfügung.

Funktion	Header

assert	assert.h

_matherr	math.h

_matherrl	math.h

perror	errno.h


Verzeichnis-Steuerroutinen

Siehe auch

Dieses Routinen manipulieren Verzeichnisse und Pfadnamen.

Funktion	Header	Funktion	Header

chdir	dir.h	_makepath	stdlib.h
_chdrive	direct.h	mkdir	dir.h
closedir	dirent.h	_mktemp	dir.h
findfirst	dir.h	opendir	direct.h
findnext	dir.h	readdir	dirent.h
fnmerge	dir.h	rewinddir	dirent.h
fnsplit	dir.h	_rmdir	dir.h
_fullpath	stdlib.h	_searchenv	stdlib.h
getcurdir	dir.h	searchpath	dir.h
getcwd	dir.h	_searchstr	stdlib.h
_getdcwd	direct.h	setdisk	dir.h
getdisk	dir.h	_splitpath	stdlib.h


Inline-Routinen

Siehe auch

Die folgenden Routinen besitzen eine Inline-Version. Der Compiler generiert den Code für die jeweilige Inline-Version, wenn Sie #pragma intrinsic benutzen oder eine Programmoptimierung spezifizieren.

Funktion	Header	Funktion	Header

abs	math.h	stpcpy	string.h

alloca	malloc.h	strcat	string.h

_crotl	stdlib.h	strchr	string.h

_crotr	stdlib.h	strcmp	string.h

_lrotl	stdlib.h	strcpy	string.h

_lrotr	stdlib.h	strlen	string.h

memchr	mem.h	strncat	string.h

memcmp	mem.h	strncmp	string.h

memcpy	mem.h	strncpy	string.h

memset	mem.h	strnset	string.h

_rotl	stdlib.h	strrchr	string.h

_rotr	stdlib.h	strset	string.h


Ein-/Ausgaberoutinen

Siehe auch

Die folgenden Routinen geben Ihnen die Möglichkeit, E/A-Operationen auf Stream-Ebene und auf der Ebene des Betriebssystems durchzuführen.

Funktion	Header	Funktion	Header

access	io.h	lock	io.h
chmod	io.h	locking	io.h
chsize	io.h	lseek	io.h
clearerr	stdio.h	open	io.h
close	io.h	_open_osfhandle	io.h
creat	io.h	_pclose	stdio.h
creatnew	io.h	perror	stdio.h
creattemp	io.h	_pipe	io.h
cscanf	conio.h	_popen	stdio.h
dup	io.h	printf	stdio.h
dup2	io.h	putc	stdio.h
eof	io.h	putchar	stdio.h
fclose	stdio.h	puts	stdio.h
_fcloseall	stdio.h	_putw	stdio.h
_fdopen	stdio.h	read	io.h
feof	stdio.h	remove	stdio.h
ferror	stdio.h	rename	stdio.h
fflush	stdio.h	rewind	stdio.h
fgetc	stdio.h	_rmtmp	stdio.h
_fgetchar	stdio.h	_rtl_chmod	io.h
fgetpos	stdio.h	_rtl_close	io.h
fgets	stdio.h	_rtl_creat	io.h
filelength	io.h	_rtl_open	io.h
_fileno	stdio.h	_rtl_read	io.h
_flushall	stdio.h	_rtl_write	io.h
fopen	stdio.h	scanf	stdio.h
fprintf	stdio.h	setbuf	stdio.h
fputc	stdio.h	setmode	io.h
_fputchar	stdio.h	setvbuf	stdio.h
fputs	stdio.h	_sopen	io.h
fread	stdio.h	sprintf	stdio.h
freopen	stdio.h	sscanf	stdio.h
fscanf	stdio.h	strerror	stdio.h
fseek	stdio.h	_strerror	string.h, stdio.h
fsetpos	stdio.h	tell	io.h
_fsopen	stdio.h	_tempnam	stdio.h
fstat	sys\stat.h	tmpfile	stdio.h
ftell	stdio.h	tmpnam	stdio.h
fwrite	stdio.h	umask	io.h
get_osfhandle	io.h	_unlink	dos.h
getc	stdio.h	unlock	io.h
getch	conio.h	_utime	utime.h
getchar	stdio.h	vfprintf	stdio.h
getche	conio.h	vfscanf	stdio.h
getftime	io.h	vprintf	stdio.h
gets	stdio.h	vscanf	stdio.h
_getw	stdio.h	vsprintf	stdio.h
isatty	io.h	vsscanf	io.h
kbhit	conio.h


Bearbeitungsroutinen

Siehe auch

Die folgenden Routinen führen mit Strings und Speicherblöcken Kopier-, Vergleichs-, Konvertierungs- und Suchoperationen aus.

Funktion	Header	Funktion	Header

mblen	stdlib.h	stricmp	string.h
mbstowcs	stdlib.h	strlen	string.h
mbtowc	stdlib.h	strlwr	string.h
memccpy	mem.h, string.h	strncat	string.h
memchr	mem.h, string.h	strncmpi	string.h
memcmp	mem.h, string.h	strncmp	string.h
memcpy	mem.h, string.h	strncpy	string.h
memicmp	mem.h, string.h	strnicmp	string.h
memmove	mem.h, string.h	strnset	string.h
memset	mem.h, string.h	strpbrk	string.h
setmem	mem.h	strrchr	string.h
stpcpy	string.h	strrev	string.h
strcat	string.h	strset	string.h
strchr	string.h	strspn	string.h
strcmpi	string.h	strstr	string.h
strcmp	string.h	strtok	string.h
strcoll	string.h	strupr	string.h
strcpy	string.h	strxfrm	string.h
strcspn	string.h	wcstombs	stdlib.h
strdup	string.h	wctomb	stdlib.h
strerror	string.h


Mathematische Routinen

Siehe auch

Diese Routinen unterstützen mathematische Berechnungen und Konvertierungen.

Funktion	Header	Funktion	Header

abs	stdlib.h	labs	stdlib.h
acos	math.h	ldexp	math.h
acosl	math.h	ldexpl	math.h
asin	math.h	ldiv	math.h
asinl	math.h	log	math.h
atan	math.h	logl	math.h
atan2	math.h	log10	math.h
atan2l	math.h	log10l	math.h
atanl	math.h	_lrotl	stdlib.h
atof	stdlib.h, math.h	_lrotr	stdlib.h
atoi	stdlib.h	_ltoa	stdlib.h
atol	stdlib.h	_matherr	math.h
_atold	math.h	_matherrl	math.h
cabs	math.h	modf	math.h
cabsl	math.h	modfl	math.h
ceil	math.h	poly	math.h
ceill	math.h	polyl	math.h
_clear87	float.h	pow	math.h
_control87	float.h	powl	math.h
cos	math.h	rand	stdlib.h
cosh	math.h	random	stdlib.h
coshl	math.h	randomize	stdlib.h
cosl	math.h	_rotl	stdlib.h
div	math.h	_rotr	stdlib.h
ecvt	stdlib.h	sin	math.h
exp	math.h	sinh	math.h
expl	math.h	sinhl	math.h
fabs	math.h	sinl	math.h
fabsl	math.h	sqrt	math.h
fcvt	stdlib.h	sqrtl	math.h
floor	math.h	srand	stdlib.h
floorl	math.h	_status87	float.h
fmod	math.h	strtod	stdlib.h
fmodl	math.h	strtol	stdlib.h
_fpreset	float.h	_strtold	stdlib.h
frexp	math.h	strtoul	stdlib.h
frexpl	math.h	tan	math.h
gcvt	stdlib.h	tanh	math.h
hypot	math.h	tanhl	math.h
hypotl	math.h	tanl	math.h
itoa	stdlib.h	ultoa	stdlib.h


Speicherroutinen

Siehe auch

Die folgenden Routinen ermöglichen in Small-Data- und Large-Data-Modellen eine dynamische Speicherzuteilung.

Funktion	Header	Funktion	Header

alloca	malloc.h	heapwalk	alloc.h
calloc	alloc.h, stdlib.h	malloc	alloc.h, stdlib.h
free	alloc.h, stdlib.h	realloc	alloc.h, stdlib.h
heapcheck	alloc.h	set_new_handler	new.h
heapcheckfree	alloc.h	stackavail	malloc.h
heapchecknode	alloc.h


Verschiedene Routinen

Siehe auch

Diese Routinen bieten die Möglichkeit nicht-lokaler Verzweigungen und lokale Unterstützung.

Funktion	Header

localeconv	locale.h

longjmp	setjmp.h

setjmp	setjmp.h

setlocale	locale.h


Veraltete Funktionen

Siehe auch

Die alten Namen der folgenden Funktionen sind zwar verfügbar, doch gibt der Compiler eine Warnung aus, die Sie auf die Verwendung eines obsoleten Namens aufmerksam macht. Womöglich werden diese Funktionsnamen in zukünftigen Versionen von C++Builder nicht mehr unterstützt.

Folgende Funktionsnamen haben sich geändert:

Alter Name	Neuer Name	Header-Datei

_chmod	_rtl_chmod	io.h

_close	_rtl_close	io.h

_creat	_rtl_creat	io.h

_heapwalk	_rtl_heapwalk	malloc.h

_open	_rtl_open	io.h

_read	_rtl_read	io.h

_write	_rtl_write	io.h


Ablaufsteuerungsroutinen

Siehe auch

Diese Routinen aktivieren und beenden neue Prozesse aus einer anderen Routine heraus:

Funktion	Header	Funktion	Header

abort	(process.h)	exit	(process.h)
_beginthread	(process.h)	_expand	(process.h)
_beginthreadNT	(process.h)	getpid	(process.h)
_c_exit	(process.h)	_pclose	(stdio.h)
_cexit	(process.h)	_popen	(stdio.h)
cwait	(process.h)	raise	(signal.h)
_endthread	(process.h)	signal	(signal.h)
execle	(process.h)	spawnle	(process.h)
execl	(process.h)	spawnlpe	(process.h)
execlpe	(process.h)	spawnlp	(process.h)
execlp	(process.h)	spawnl	(process.h)
execve	(process.h)	spawnve	(process.h)
execv	(process.h)	spawnvpe	(process.h)
execvpe	(process.h)	spawnvp	(process.h)
execvp	(process.h)	spawnv	(process.h)
_exit	(process.h)	wait	(process.h)


Zeit- und Datums-Routinen

Siehe auch

Die folgenden Funktionen dienen zur Konvertierung und Bearbeitung von Zeitwerten.

Funktion	Header	Funktion	Header

asctime	time.h	stime	time.h
ctime	time.h	_strdate	time.h
difftime	time.h	strftime	time.h
ftime	sys\timeb.h	_strtime	time.h
gettime	dos.h	time	time.h
gmtime	time.h	_tzset	time.h
localtime	time.h	unixtodos	dos.h
mktime	time.h


Routinen für variable Argumentlisten

Siehe auch

Die folgenden Routinen sind für den Zugriff auf variable Argumentlisten vorgesehen (wie bei printf, vscanf usw.).

Funktion	Header

va_start	stdarg.h

va_arg	stdarg.h

va_end	stdarg.h


Bibliotheksroutinen, nach Namen sortiert

Siehe auch	Überblick

Falls Sie den Namen einer Funktion nicht kennen, jedoch wissen, zu welchem Zweck sie dient, wählen Sie

Bibliotheksroutinen, nach Kategorien sortiert

Falls Sie den Namen der Funktion wissen, zu der Sie Hilfe benötigen, so wählen Sie eines der folgenden Themen:

A

abort

abs

access

acos

acosl

alloca

asctime

asin

asinl

assert

atan

atan2

atan2l

atanl

atexit

atof

atoi

atol

_atold

B

_beginthread

_beginthreadNT

bsearch

C

_c_exit

cabs

cabsl

calloc

ceil

ceill

_cexit

cgets

chdir

_chdrive

chmod

chsize

_clear87

clearerr

clock

close

closedir

clreol

clrscr

_control87

cos

cosh

coshl

cosl

creat

creatnew

creattemp

_crotl

_crotr

cscanf

ctime

cwait

D

delline

difftime

disable

_disable

div

dup

E

ecvt

_ _emit_ _

enable

_enable

_endthread

eof

execl

execle

execlp

execlpe

execv

execve

execvp

execvpe

exit

_exit

exp

_expand

expl

F

fabs

fabsl

fclose

_fcloseall

fcvt

_fdopen

feof

ferror

fflush

fgetc

_fgetchar

fgetpos

fgets

filelength

_fileno

findfirst

findnext

floor

floorl

_flushall

fmod

fmodl

fnmerge

fnsplit

fopen

_fpreset

fprintf

fputc

_fputchar

fputs

fread

free

freopen

frexp

frexpl

fscanf

fseek

fsetpos

_fsopen

fstat

ftell

ftime

_fullpath

fwrite

G

gcvt

geninterrupt

_get_osfhandle

getc

getch

getchar

getche

getcurdir

getcwd

_getdcwd

getdfree

getdisk

getenv

getftime

getpass

getpid

gets

gettext

gettextinfo

gettime

_getw

gmtime

gotoxy

H

heapcheck

heapcheckfree

heapchecknode

_heapchk

heapfillfree

_heapmin

_heapset

heapwalk

highvideo

hypot

hypotl

I

insline

isalnum

isalpha

isascii

isatty

iscntrl

isdigit

isgraph

islower

isprint

ispunct

isspace

isupper

isxdigit

itoa

K

kbhit

L

labs

ldexp

ldexpl

ldiv

lfind

localeconv

localtime

lock

locking

log

log10

log10l

logl

longjmp

lowvideo

_lrotl

_lrotr

lsearch

lseek

_ltoa

M

_makepath

malloc

_matherr

_matherrl

max

mblen

mbstowcs

mbtowc

memccpy

memchr

memcmp

memcpy

memicmp

memmove

memset

min

mkdir

_mktemp

mktime

modf

modfl

movetext

_msize

N

normvideo

O

offsetof

open

_open_osfhandle

opendir

P

_pclose

perror

_pipe

poly

polyl

_popen

pow

pow10

pow10l

powl

printf

putc

putch

putchar

putenv

puts

puttext

_putw

Q

qsort

R

raise

rand

random

randomize

read

readdir

realloc

remove

rename

rewind

rewinddir

_rmdir

_rmtmp

_rotl

_rotr

_rtl_chmod

_rtl_close

_rtl_creat

_rtl_heapwalk

_rtl_open

_rtl_read

_rtl_write

S

scanf

_searchenv

searchpath

_searchstr

set_new_handler

setbuf

_setcursortype

setdate

setdisk

setjmp

setlocale

setmem

setmode

settime

setvbuf

signal

sin

sinh

sinhl

sinl

sleep

_sopen

spawnl

spawnle

spawnlp

spawnlpe

spawnv

spawnve

spawnvp

spawnvpe

_splitpath

sprintf

sqrt

sqrtl

srand

sscanf

stackavail

stat

_status87

stime

stpcpy

strcat

strchr

strcmp

strcmpi

strcoll

strcpy

strcspn

_strdate

strdup

strerror

_strerror

strftime

stricmp

strlen

strlwr

strncat

strncmp

strncmpi

strncpy

strnicmp

strnset

strpbrk

strrchr

strrev

strset

strspn

strstr

_strtime

strtod

strtok

strtol

_strtold

strtoul

strupr

strxfrm

swab

system

T

tan

tanh

tanhl

tanl

tell

_tempnam

textattr

textbackground

textcolor

textmode

time

tmpfile

tmpnam

toascii

tolower

_tolower

toupper

_toupper

_tzset

U

ultoa

umask

ungetc

ungetch

unixtodos

_unlink

unlock

_utime

V

va_arg

va_end

va_start

vfprintf

vfscanf

vprintf

vscanf

vsprintf

vsscanf

W

wait

wcstombs

wctomb

wherex

wherey

window

write


abort

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void abort(void);

Beschreibung

Beendet ein Programm mit einer Fehlermeldung.

abort bewirkt einen Programmabbruch durch Aufruf von raise(SIGABRT). Falls es für SIGABRT keinen Signal-Handler gibt, so wird eine Abbruchmeldung ("Abnormal program termination") auf stderr ausgegeben und daraufhin das Programm durch den Aufruf von _exit mit dem Exit-Code 3 beendet.

Rückgabewert

Gibt den Exit-Code 3 an den übergeordneten Prozeß oder an den Kommandozeileninterpreter des Betriebssystems zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


abs

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int abs(int x);

Beschreibung

Liefert den absoluten Betrag einer Integer-Zahl.

abs liefert den absoluten Betrag seines Integer-Arguments x. Wenn stdlib.h eingebunden wurde, wird diese Funktion als Makro behandelt und somit zu Inline-Code.

Wollen Sie statt des Makros die Funktion abs verwenden, so nehmen Sie nach #include<stdlib.h> die Zeile

#undef abs

in Ihr Programm auf.

Rückgabewert

Die Funktion abs liefert einen int im Bereich von 0 bis INT_MAX. Ausnahme: Der Wert INT_MIN wird als INT_MIN zurückgegeben. Die Werte für INT_MAX und INT_MIN sind in der Header-Datei limit.h definiert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


access, _waccess

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int access(const char *filename, int amode);

int _waccess(const wchar_t *filename, int amode);

Beschreibung

Ermittelt die Zugriffsmöglichkeiten auf eine Datei.

access prüft, ob eine Datei des (als filename) angegebenen Namens existiert. Wenn ja, folgt eine Prüfung, ob der in amode angegebene Zugriff möglich ist.

Die folgenden Werte sind für amode definiert:

06	Prüfung auf "Lesen und Schreiben erlaubt"

04	Prüfung auf "Lesen erlaubt"

02	Prüfung auf "Schreiben erlaubt"

01	Prüfung auf "Ausführung erlaubt"

00	Prüfung auf "Datei existiert"

Unter DOS, OS/2 und Windows (16- und 32-Bit) besitzen alle existierenden Dateien automatisch Lesezugriff (amode 04), so daß die Werte 04 und 00 für amode dasselbe Ergebnis erzeugen. Eine Schreiberlaubnis impliziert bei DOS auch die Erlaubnis zum Lesen; folglich sind die Werte 06 und 02 für amode ebenfalls äquivalent.

Wenn filename ein Verzeichnis enthält, prüft access nur das Vorhandensein dieses Verzeichnisses.

Rückgabewert

Ist der durch amode angegebene Zugriff erlaubt, so liefert access den Wert 0 zurück. Ansonsten ist der Rückgabewert -1, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

ENOENT	Pfad oder Datei nicht vorhanden

EACCES	Datei vorhanden, aber Zugriff nicht erlaubt


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


acos, acosl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double acos(double x);

long double acosl(long double x);

Beschreibung

Berechnet den Arcuscosinus.

acos liefert den Arcuscosinus des Eingabewerts.

acosl ist die long double-Version und arbeitet mit einem long double-Parameter sowie einem long double-Rückgabewert.

Die Argumente zu acos und acosl müssen sich im Bereich von -1 bis 1 befinden. Andernfalls wird der Wert NAN zurückgeliefert, und die globale Variable errno wird auf folgenden Wert gesetzt:

EDOM	Argument außerhalb des zulässigen Bereichs

Rückgabewert

Bei einem Argument zwischen -1 und +1 liefern acos und acosl Werte im Bereich von 0 bis pi zurück. Die Fehlerbehandlung für acos und acosl kann über die Funktionen _matherr_matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
acos	+	+	+	+	+	+	+
acosl	+		+	+			+


alloca

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

void *alloca(size_t size);

Beschreibung

Reserviert temporären Speicher auf dem Stack.

alloca reserviert einen Speicherbereich von size Bytes auf dem Stack. Der reservierte Speicherbereich wird beim Beenden der aufrufenden Funktion automatisch freigegeben.

alloca modifiziert den Stack-Zeiger und darf deshalb nicht in einem Ausdruck aufgerufen werden, der ein Argument einer Funktion ist.

Die Funktion alloca sollte nicht im try-Block eines C++ Programms verwendet werden. Wenn eine Exception ausgelöst wird, werden alle Werte, die von alloca auf dem Stack abgelegt werden, zerstört.

Die aufrufende Funktion muß Referenzen auf lokale Variablen im Stack enthalten, da der Stack andernfalls beim Funktionsende nicht korrekt wiederhergestellt wird, was zu einem Programmabsturz führt. Verwenden Sie deshalb folgenden Programmtext in der aufrufenden Funktion:

char *p;

char dummy[5];

dummy[0] = 0;

  .

  .

  .

p = alloca(nbytes);

Rückgabewert

Wenn im Stack ein Speicherbereich von ausreichender Größe zur Verfügung steht, liefert alloca einen Zeiger auf den belegten Speicherbereich zurück. Andernfalls wird der Wert NULL zurückgegeben.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


asctime
asctime, _wasctime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

char *asctime(const struct tm *tblock);

wchar_t *_wasctime(const struct tm *tblock);

Beschreibung

Konvertiert Datum und Uhrzeit in einen ASCII-String.

_wasctime konvertiert Datum und Uhrzeit in einen wchar_t-String.

asctime konvertiert eine Zeitangabe, die als Struktur des Typs tm in *tblock gespeichert ist, in einen String mit 26 Zeichen, der wie ctime das folgende Format hat:

   Wed Jun 23 15:35:54 1993\n\0

Rückgabewert

asctime liefert einen Zeiger auf den String zurück, der Datum und Uhrzeit enthält. Der String ist eine statische Variable, die mit jedem Aufruf von asctime  überschrieben wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


asin, asinl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double asin(double x);

long double asinl(long double x);

Beschreibung

Berechnet den Arcussinus.

asin liefert für ein reelles Argument den Arcussinus des eingegebenen Werts zurück.

asinl ist die long double-Version und erwartet ein Argument vom Typ long double. asinl liefert ein Ergebnis vom Typ long double zurück.

asin und asinl erwarten ein reelles Argument im Bereich von -1 bis +1. Reelle Argumente außerhalb dieses Bereichs liefern NAN und setzen errno auf den Wert

EDOM	Fehler in der Domäne

Rückgabewert

Der Rückgabewert von asin und asinl liegt für reelle Argumente im Bereich von -pi/2 bis pi/2. Die Fehlerbearbeitung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
asin	+	+	+	+	+	+	+
asinl	+		+	+			+


assert

Siehe auch	Beispiel	Portabilität

Syntax

#include <assert.h>

void assert(int test);

Beschreibung

Prüft eine Bedingung und bricht das Programm ab, wenn sie nicht zutrifft.

assert ist ein Makro, das bei der Compilierung zu einer if-Anweisung erweitert wird. Wenn test zur Laufzeit des Programms den Wert Null (d.h. false) ergibt, bricht assert das Programm mit abort ab und gibt die folgende Botschaft von stderr aus:

Assertion failed: test, file Dateiname, line Zeilennummer

Der in der Botschaft enthaltene Dateiname und die Zeilennummer sind der Name der Quelldatei und die Zeilennummer, in der das Makro assert erscheint.

Wenn die Anweisung NDEBUG vor der Aufnahme von assert.h im Quelltext (oder mit #define NDEBUG) definiert ist, entfernt der Präprozessor sämtliche Aufrufe von assert.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


atan, atanl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double atan(double x);

long double atanl(long double x);

Beschreibung

Berechnet den Arcustangens.

atan berechnet den Arcustangens des übergebenen Arguments.

atanl ist die long double-Version und erwartet ein Argument vom Typ long double. atanl liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

atan und atanl liefern einen Wert im Bereich von -pi/2 bis pi/2. Die Fehlerbehandlung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
atan	+	+	+	+	+	+	+
atanl	+		+	+			+


atan2, atan2l

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double atan2(double y, double x);

long double atan2l(long double y, long double x);

Beschreibung

Berechnet den Arcustangens von y/x.

atan2 liefert den Arcustangens von y/x und erzeugt auch dann noch korrekte Resultate, wenn sich der ergebende Winkel pi/2 oder -pi/2 nähert (den Polstellen der Tangensfunktion, für Werte von x nahe Null). Wenn die beiden Argumente x und y gleich null sind, setzt diese Funktion errno auf den Wert EDOM und zeigt so einen ungültigen Eingabewert an.

atan2l ist die long double-Version und erwartet ein Argument vom Typ long double. atan2l liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

atan2 und atan2l liefern einen Wert im Bereich von -pi bis pi. Die Fehlerbehandlung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
atan2	+	+	+	+	+	+	+
atan2l	+		+	+			+


atexit

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int atexit(void (_USERENTRY * func)(void));

Beschreibung

Registriert Routinen, die am Ende eines Programms aufgerufen werden sollen.

atexit registriert die Funktion, auf die func zeigt, als sogenannte Exit-Funktion. Bei normalem Programmende ruft exit die Funktion func unmittelbar vor der Rückkehr zum Betriebssystem auf. fcmp muß zusammen mit der Aufrufkonvention _USERENTRY verwendet werden.

Durch jeden Aufruf von atexit wird eine weitere Funktion registriert. Bis zu 32 Funktionen können so registriert werden, die bei Programmende nach dem Prinzip "last in - first out" ausgeführt werden. (Die als letzte mit atexit festgelegte Funktion wird also zuerst ausgeführt.)

Rückgabewert

atexit liefert bei erfolgreicher Ausführung den Wert 0 zurück. Bei einem Fehler (kein weiterer Platz zum Registrieren der Funktion verfügbar) ist das Ergebnis ungleich null.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+  	+	+


atof, _atold, _wtof, _wtold

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double atof(const char *s);

double _wtof(const wchar_t *s);

long double _atold(const char *s);

long double _wtold(const wchar_t *s);

Beschreibung

Konvertiert einen String in eine Gleitkommazahl.

atof konvertiert den durch s bezeichneten String in eine Gleitkommazahl und liefert das Ergebnis als double. Die Funktion erkennt dabei folgende Elemente in der Zeichendarstellung der Gleitkommazahl:

eine optionale Folge von Leerzeichen und/oder Tabulatoren;

ein optionales Vorzeichen;

eine Folge von Ziffern und einen optionalen Dezimalpunkt (die Ziffern können vor oder hinter dem Dezimalpunkt stehen);

einen optionalen Exponenten e oder E, gefolgt von einem optional vorzeichenbehafteten Integerwert.

Der String muß dem folgenden Format entsprechen:

[whitespace][sign][ddd][.][ddd][e|E[sign]ddd]

atof erkennt zusätzlich +INF und -INF als positiv bzw. negativ Unendlich sowie +NAN und -NAN (für "Not a Number").

Die Konvertierung bricht beim ersten nicht interpretierbaren Zeichen ab.

_atold ist die long double-Version und konvertiert den durch s bezeichneten String in einen Wert vom Typ long double.

strtod und _strtold arbeiten ähnlich wie atof und _atold, erlauben aber eine bessere Fehlerbehandlung und werden daher in manchen Anwendungen bevorzugt.

Rückgabewert

atof und _atold liefern den konvertierten Wert des Eingabestrings zurück.

Im Fall eines Überlaufs liefert atof (oder _atold) den Wert +HUGE_VAL oder -HUGE_VAL (bzw. _LHUGE_VAL) zurück, und errno wird auf ERANGE gesetzt (Resultat außerhalb des zulässigen Bereichs). Die Routine _matherr (bzw. _matherrl) wird nicht aufgerufen.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
atof	+	+	+	+	+	+	+
_atold	+		+	+			+


atoi, _atoi64,  _wtoi, _wtoi64

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int atoi(const char *s);

__int64 _atoi64(const char *s);

int _wtoi(const wchar_t *s);

__int64 _wtoi64(const wchar_t *s);

Beschreibung

Konvertiert einen String in eine Integerzahl.

atoi konvertiert den durch s bezeichneten String in einen int-Wert. Die Funktion erkennt die folgenden Elemente (in der aufgeführten Reihenfolge):

optionale führende Leerzeichen und/oder Tabulatoren;

ein optionales Vorzeichen;

eine Ziffernfolge.

Der String muß also folgendem generischen Format entsprechen:

[whitespace][sign][ddd]

Die Konvertierung endet beim ersten nicht interpretierbaren Zeichen. Eine Prüfung auf eventuelle Überläufe findet nicht statt (die Funktionsergebnisse sind dann undefiniert)

Rückgabewert

atoi liefert das Ergebnis der Konvertierung oder 0, wenn der zu interpretierende String nicht zu einem Integerwert konvertierbar ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


atol, _wtol

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

long atol(const char *s);

long _wtol(const wchar_t *s);

Beschreibung

Konvertiert einen String in einen long-Wert

atol konvertiert den durch s bezeichneten String in einen long-Wert. atol erkennt die folgenden Elemente (in der aufgeführten Reihenfolge):

optionale führende Leerzeichen und/oder Tabulatoren;

ein (optionales) Vorzeichen;

eine Ziffernfolge.

Der String muß also folgendem generischen Format entsprechen:

[whitespace][sign][ddd]

Die Konvertierung endet beim ersten nicht interpretierbaren Zeichen. Eine Prüfung auf eventuelle Überläufe findet nicht statt (die Funktionsergebnisse sind dann undefiniert).

Rückgabewert

atol liefert das Ergebnis der Konvertierung zurück. Wenn der zu interpretierende String nicht zu einem long-Wert konvertiert werden kann, liefert atol 0 zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_beginthread

Siehe auch	Beispiel	Portabilität

Syntax

#include <process.h>

unsigned long _beginthread(_USERENTRY (*start_address)(void *), unsigned stack_size, void *arglist)

Beschreibung

Startet die Ausführung eines neuen Thread.

Hinweis:	start_address muß als _USERENTRY deklariert werden.

Die Funktion _beginthread erzeugt einen neuen Thread und startet ihn. Die Ausführung des Thread beginnt bei der Adresse start_address.

Der Thread erhält vom Betriebssystem einen Stack der Größe stack_size Bytes, wobei der Wert auf das nächste Vielfache von 4096 aufgerundet wurde. arglist wird dem Thread als einziger Parameter übergeben. arglist kann NULL sein, muß jedoch angegeben werden. Der Thread endet einfach per Rücksprung oder durch den Aufruf von _endthread.

Entweder sollte diese Funktion oder _beginthreadNT anstelle von thread-erzeugenden API-Funktionen verwendet werden, da nur für Funktionen der Laufzeitbibliothek auch die benötigten Initialisierungen durchgeführt werden.

Diese Funktion ist nur in den Multithread-Bibliotheken verfügbar.

Rückgabewert

_beginthread liefert das Handle des neuen Thread zurück.

Bei einem Fehler wird -1 zurückgegeben, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EAGAIN	Zu viele Threads

EINVAL	Ungültige Anforderung

Siehe auch die Win32-Beschreibung von GetLastError.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


_beginthreadNT

Siehe auch	Beispiel	Portabilität

Syntax

#include <process.h>

unsigned long _beginthreadNT(void (_USERENTRY *start_address)(void *), unsigned stack_size, void *arglist, void *security_attrib, unsigned long create_flags, unsigned long *thread_id);

Beschreibung

Startet die Ausführung eines neuen Thread unter Windows NT.

Hinweis:	start_address muß als _USERENTRY deklariert sein.

Alle Multi-Thread-Programme unter Windows NT müssen _beginthreadNT oder die Funktion _beginthread anstelle der API-Funktion des Betriebssystems zur Erzeugung des Thread verwenden, da diese Funktionen eine Initialisierung ausführen, die für ein korrektes Arbeiten der Laufzeitbibliotheksfunktionen erforderlich sind. Die Funktion _beginthreadNT bietet Unterstützung für die Betriebssystemsicherheit. Diese Funktionen sind nur in den Multithread-Bibliotheken verfügbar.

Die Funktion _beginthreadNT erzeugt und startet einen neuen Thread. Der Thread beginnt mit der Ausführung bei start_address.

Die Größe seines Stack in Bytes beträgt stack_size; der Stacl wird durch das Betriebssystem reserviert, nachdem die Stack-Größe auf das nächste Vielfache von 4096 aufgerundet wurde. arglist kann NULL sein, muß allerdings angegeben werden. Der Thread terminiert, indem er einfach zurückkehrt oder _endthread aufruft.

Die Funktion _beginthreadNT verwendet den Zeiger security_attr, um auf die Struktur SECURITY_ATTRIBUTES zuzugreifen. Die Struktur enthält die Sicherheitsattribute für den Thread. Wenn security_attr NULL ist, wird der Thread mit Standardsicherheitsattributen erzeugt. Das Thread-Handle wird nicht geerbt, wenn security_attr NULL ist.

_beginthreadNT greift auf die Variable create_flags für Flags zu, die zusätzliche Informationen über die Thread-Erzeugung bietet. Diese Variable kann null sein. Damit wird angegeben, daß der Thread direkt nach der Erzeugung starten wird. Die Variable kann aber auch den Wert CREATE_SUSPENDED annehmen. In diesem Falle wird der Thread so lange nicht laufen, bis die Funktion ResumeThread aufgerufen wird. ResumeThread wird durch Win32-API bereitgestellt.

_beginthreadNT initialisiert die Variable thread_id mit dem Thread-Bezeichner.

Rückgabewert

Bei Erfolg gibt _beginthreadNT das Handle des neuen Thread zurück.

Bei einem Fehler gibt sie -1 zurück, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EAGAIN	Zu viele Threads

EINVAL	Ungültige Anforderung


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	 	+


biosmemory

Beispiel	Portabilität

Syntax

#include <bios.h>

int biosmemory(void);

Beschreibung

Liefert die Größe des Hauptspeichers zurück.

Diese Funktion verwendet den BIOS-Interrupt 0x12 zur Bestimmung der RAM-Größe. Zusätzliches RAM in Grafikkarten, Erweiterungsspeicher und Expansionsspeicher wird nicht berücksichtigt.

Rückgabewert

biosmemory liefert die Größe des Hauptspeichers in Blöcken von einem KByte zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+


bsearch

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void *bsearch(const void *key, const void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

Beschreibung

Binäres Absuchen eines Array.

bsearch sucht eine Tabelle (ein Array) mit nelem Elementen ab. Die Elemente müssen sortiert sein. bsearch liefert die Adresse des ersten Tabelleneintrags, der mit dem Suchschlüssel *key übereinstimmt, oder 0, wenn keine Übereinstimmung gefunden wird.

Hinweis:	Da es sich um eine binäre Suche handelt, ist der erste übereinstimmende Eintrag nicht unbedingt auch der erste Eintrag in der Tabelle.

Der Datentyp size_t ist in der Header-Datei stddef.h definiert.

nelem ist ein Integer, der die Anzahl der Array-Elemente enthält.

width gibt die Größe eines einzelnen Elements in Bytes an.

Die Vergleichsroutine fcmp muß mit der _USERENTRY-Aufrufkonvention verwendet werden.

fcmp wird mit zwei Parametern aufgerufen: elem1 and elem2. Jeder Parameter zeigt auf ein zu vergleichendes Element. Die Routine vergleicht *elem1 und *elem2 und liefert einen Integerwert zurück, der auf den Resultaten des Vergleichs beruht.

Für bsearch ist der fcmp-Rückgabewert:

< 0	falls *elem1 < *elem2

== 0	falls *elem1 == *elem2

> 0	falls *elem1 > *elem2

Rückgabewert

bsearch liefert die Adresse des ersten Elements des Array zurück, das mit dem Suchschlüssel übereinstimmt. Falls der gesuchte Eintrag nicht existiert, wird 0 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


cabs, cabsl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double cabs(struct complex z);

long double cabsl(struct _complexl z);

Beschreibung

Berechnet den Absolutwert einer komplexen Zahl. cabs ist ein Makro, das den Absolutwert von z, einer Struktur des Typs complex, berechnet. Dieser Strukturtyp ist in math.h folgendermaßen definiert:

struct complex {

   double x, y;

   };

wobei x den reellen und y den Imaginärteil der komplexen Zahl aufnimmt.

Der Aufruf von cabs entspricht einem Aufruf von sqrt mit den Quadraten der reellen und imaginären Bestandteile von z, also

sqrt(z.x * z.x + z.y * z.y)

cabsl ist die long double-Version und erwartet als Argument eine Struktur des Typs _complexl. Sie liefert ein Ergebnis vom Typ long double zurück. Die Struktur ist in math.h wie folgt definiert:

struct _complexl {

   long double x, y;

};

Rückgabewert

cabs (oder cabsl) liefert den Absolutwert von z als double. Bei einem Überlauf liefert cabs (oder cabsl) HUGE_VAL (bzw. _LHUGE_VAL) und setzt die globale Variable errno auf

ERANGE	Ergebnis außerhalb des Rechenbereichs

Die Fehlerbehandlung für diese Funktionen kann über _matherr und _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
cabs	+	+	+	+			+
cabsl	+		+	+			+


calloc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void *calloc(size_t nitems, size_t size);

Beschreibung

Reserviert Hauptspeicher.

Über diese Funktion wird der Heap verwaltet, in dem Platz für dynamische Variablen belegt und wieder freigegeben werden kann. Viele Datenstrukturen, wie z.B. Bäume und Listen, können nur auf dem Heap untergebracht werden.   calloc allocates a block of size nitems * size. The block is initialized to 0.

calloc belegt einen Speicherbereich von nitems * size Bytes, die mit 0 initialisiert werden.

Rückgabewert

calloc liefert einen Zeiger auf den neu reservierten Speicherbereich. Wenn kein Speicherbereich ausreichender Größe zur Verfügung steht oder nitems oder size den Wert 0 haben, liefert calloc NULL zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


ceil, ceill

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double ceil(double x);

long double ceill(long double x);

Beschreibung

Rundet auf.

ceil ermittelt den kleinsten Integerwert größer oder gleich x.

ceill ist die long double-Version und erwartet ein Argument vom Typ long double. Sie liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

Die Funktionen ceil und ceill liefern ihr ganzzahliges Ergebnis als Wert vom Typ double bzw. long double zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
ceil	+	+	+	+	+	+	+
ceill	+		+	+			+


_c_exit

Siehe auch	Beispiel	Portabilität

Syntax

#include <process.h>

void _c_exit(void);

Beschreibung

Funktioniert wie _exit, ohne das laufende Programm zu beenden.

_c_exit führt die gleichen Arbeiten wie _exit, durch, beendet aber den aufrufenden Prozeß nicht.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_cexit

Siehe auch	Beispiel	Portabilität

Syntax

#include <process.h>

void _cexit(void);

Beschreibung

Funktioniert wie _exit, ohne das laufende Programm zu beenden.

_cexit führt die gleichen Arbeiten durch wie exit, schließt aber keine geöffneten Dateien und beendet nicht den aufrufenden Prozeß. Die Funktion _cexit ruft jede registrierte Exit-Funktion auf (festgelegt mit atexit). Bevor _cexit zurückkehrt, werden alle Input/Output-Puffer gefüllt und alle geöffneten Streams geschlossen.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+ 	 	 	+


cgets

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

char *cgets(char *str);

Beschreibung

Liest einen String von der Tastatur.

cgets liest einen String von der Tastatur und speichert ihn (und die Stringlänge) an der Speicherstelle, auf die str zeigt.

cgets liest die Zeichen, bis es eine CR/LF-Kombination antrifft oder bis die maximal zulässige Zeichenzahl gelesen wurde. Vor der Speicherung des Strings wird die eventuell gelesene CR/LF-Kombination durch ein abschließendes Nullzeichen (\0) ersetzt.

Speichern Sie vor dem Aufruf von cgets in str[0] die Maximallänge des zu lesenden Strings. Nach der Rückkehr steht in str[1] die Anzahl der tatsächlich gelesenen Zeichen. Die gelesenen Zeichen werden ab str[2] gespeichert und enden mit einem Nullzeichen. str muß daher mindestens str[0] + 2 Bytes lang sein.

Hinweis: 	 Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

cgets liefert einen Zeiger auf str[2] zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	 	 	+


chdir
chdir, _wchdir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int chdir(const char *path);

int _wchdir(const wchar_t *path);

Beschreibung

Wechselt das aktuelle Verzeichnis.

chdir setzt das durch path bezeichnete Verzeichnis als aktuelles Arbeitsverzeichnis. Der Parameter path muß ein existierendes Verzeichnis enthalten.

path kann auch eine Laufwerksangabe enthalten wie etwa:

   chdir ("a:\\BC")

Hier wird jedoch nur das aktuelle Verzeichnis dieses Laufwerks gewechselt, nicht das aktive Laufwerk selbst.

Unter Windows ist nur der aktive Prozeß betroffen.

Unter DOS ändert die Funktion auch das aktuelle Verzeichnis des übergeorneten Prozeßes.

Rückgabewert

Wenn das angegebene Verzeichnis gesetzt werden konnte, liefert chdir den Wert 0; ansonsten wird -1 zurückgeliefert, und die globale Variable errno erhält den Wert:

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_chdrive

Beispiel	Portabilität

Syntax

#include <direct.h>

int _chdrive(int drive);

Beschreibung

Setzt das aktuelle Laufwerk.

_chdrive macht das durch drive bezeichnete Laufwerk (1 = A, 2 = B, 3 = C, usw.) zum aktuellen Laufwerk.

Diese Funktion ändert nur das aktuelle Laufwerk des übergeordneten Prozeßes.

Rückgabewert

Wenn das aktuelle Laufwerk erfolgreich geändert werden konnte, liefert _chdrive den Wert 0; ansonsten wird -1 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


chmod, _wchmod

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int chmod(const char *path, int amode);

int _wchmod(const wchar_t *path, int amode);

Beschreibung

Ändert die Zugriffsmöglichkeiten auf eine Datei.

chmod setzt die Zugriffsberechtigung der durch path angegebenen Datei auf den durch amode angegebenen Wert. path zeigt auf einen String.

amode kann eine (oder beide) der in sys\stat.h definierten symbolischen Konstanten S_IWRITE und S_IREAD enthalten:

Wert von amode	Zugriffsberechtigung

S_IWRITE	Schreiben erlaubt

S_IREAD	Lesen erlaubt

S_IREAD|S_IWRITE	Lesen und Schreiben erlaubt

Rückgabewert

Bei fehlerfreier Ausführung liefert chmod den Wert 0.

Im Fehlerfall ist der Rückgabewert -1, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EACCES	Zugriff nicht erlaubt

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


chsize

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int chsize(int handle, long size);

Beschreibung

Ändert die Größe einer Datei.

chsize ändert die Größe der mit handle verbundenen Datei. Er kann eine Datei abschneiden oder vergrößern, abhängig von dem mit der originalen Dateigröße verglichenen Wert von size.

Die Datei muß in beiden Fällen in einem Modus geöffnet worden sein, der Schreibaktionen erlaubt.

Falls chsize die Datei vergrößert, werden Nullzeichen (\0) angehängt. Falls die Datei abgeschnitten wird, gehen alle Daten nach dem neuen Ende-der-Datei Markierung (EOF) verloren.

Rückgabewert

Bei fehlerfreier Ausführung liefert chsize den Wert 0. Ansonsten ist der Rückgabewert -1, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EACCES	Zugriff nicht erlaubt

EBADF	Ungültiges Handle

ENOSPC	Nicht genügend Platz vorhanden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_clear87

Siehe auch	Beispiel	Portabilität

Syntax

#include <float.h>

unsigned int _clear87 (void);

Beschreibung

Löscht das Gleitkomma-Statuswort.

_clear87 löscht das Statuswort für Gleitkommabearbeitung, dessen Inhalt sich aus dem Statuswort des 80x87 und einigen Bits zusammensetzt, die vom Exception-Handler des 80x87 entdeckt werden.

Rückgabewert

Es wird der vorherige Inhalt des Statuswortes zurückgeliefert, dessen einzelne Bits in float.h dokumentiert sind.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+ 	 	 	+


clearerr

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

void clearerr(FILE *stream);

Beschreibung

Setzt das Fehler- und das Dateiende-Flag für einen bestimmten Stream zurück.

clearerr setzt das Fehler-Flag und das Dateiende-Flag des durch stream bezeichneten Stream auf 0 zurück. Das Fehler-Flag einer Datei bleibt nach einem Fehler so lange gesetzt, bis entweder clearerr oder rewind aufgerufen werden. Das Dateiende-Flag wird bei jeder Eingabeoperation zurückgesetzt.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


clock

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

clock_t clock(void);

Beschreibung

Berechnet die seit dem Programmaufruf verbrauchte "CPU-Zeit".

clock kann verwendet werden, um die zwischen zwei Ereignissen vergangene Zeit zu bestimmen. Um die Zeit in Sekunden zu berechnen, kann die von clock gelieferte Zeit durch den Wert des Makros CLK_TCK geteilt werden.

Rückgabewert

clock liefert die seit dem Programmaufruf bis jetzt verbrauchte "CPU-Zeit" zurück.

Falls die Prozessorzeit nicht verfügbar ist oder deren Wert nicht dargestellt werden kann, liefert die Funktion -1 zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+


close

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int close(int handle);

Beschreibung

Schließt eine Datei.

close schließt die durch handle bezeichnete Datei. Ein Handle wird durch einen Aufruf von creat, creatnew, creattemp, dup, dup2, open, _rtl_creat oder _rtl_open erzielt.

Diese Funktion schreibt kein ^Z ([Ctrl-Z]) als Dateiende-Zeichen. Falls Sie eine Datei mit ^Z abschließen wollen, müssen Sie dieses Zeichen explizit ausgeben.

Rückgabewert

close liefert den Wert 0 zurück, wenn die Operation fehlerfrei ausgeführt werden konnte, ansonsten -1.

handle muß ein gültiges Handle sein, dem eine gültige, geöffnete Datei zugeordnet ist. Falls dem nicht so ist, erhält die globale Variable errno den Wert:

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


closedir, wclosedir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dirent.h>

void closedir(DIR *dirp);

void wclosedir(wDIR *dirp);

Beschreibung

Schließt einen Verzeichnis-Stream.

Unter UNIX ist closedir auf POSIX-Systemen verfügbar.

Die Funktion schließt den Verzeichnis-Stream dirp, der vorher durch einen Aufruf von opendir geöffnet wurde. Nachdem der Stream geschlossen wurde, zeigt dirp nicht mehr auf einen gültigen Verzeichnis-Stream.

wclosedir ist die Unicode-Version von closedir.

Rückgabewert

Bei fehlerfreier Ausführung liefert closedir den Wert 0. Ansonsten ist der Rückgabewert -1, und die globale Variable errno wird auf den folgenden Wert gesetzt:

EBADF	Der Argument dirp zeigt nicht auf einen gültigen geöffneten Verzeichnis-Stream.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


clreol

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h.>

void clreol(void);

Beschreibung

Löscht im aktuellen Textfenster alle Zeichen von der aktuellen Cursorposition bis zum Zeilenende.

clreol löscht innerhalb des aktuellen Textfensters die Spalten von der Cursorposition bis zum Ende der Zeile. Der Cursor wird dabei nicht bewegt.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


clrscr

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void clrscr(void);

Beschreibung

Löscht den Inhalt des aktuellen Textfensters.

clrscr löscht den gesamten Inhalt des aktuellen Textfensters und setzt den Cursor in die obere linke Ecke des Textfensters, d.h. auf die Koordinaten 1,1.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_control87

Siehe auch	Portabilität

Syntax

#include <float.h>

unsigned int _control87(unsigned int newcw, unsigned int mask);

Beschreibung

Liest und setzt das Steuerwort für Gleitkommaoperationen.

_control87 ermittelt oder ändert das Steuerwort für Gleitkommaoperationen.

Über die Bits dieses Wortes - ein unsigned int-Wert - werden insbesondere die Modi für Genauigkeit, Rundungsrichtung und die Behandlung unendlicher Werte in den Gleitkommaroutinen festgelegt. Durch Änderung dieser Modi können Exceptions bei Gleitkommarechnungen unterschiedlich behandelt werden.

Die einzelnen Bits von mask bestimmen, welche Bits des Steuerwortes verändert werden. Die entsprechenden Bits von newcw definieren die neuen Werte. Wenn ein Bit von mask auf 1 gesetzt ist, dann wird das entsprechende Bit des Steuerwortes auf den Wert gesetzt, den das korrespondierende Bit von newcw hat.

Ein einfaches Beispiel:

Ursprüngliches Steuerwort:	0100	0011	0110	0011

mask:	1000	0001	0100	1111

newcw:	1110	1001	0000	0101

Geänderte Bits:	1xxx	xxx1	x0xx	0101

Wenn mask 0 ist, liefert _control87 das Steuerwort zurück, ohne es zu ändern.

Rückgabewert

_control87 liefert das neue Steuerwort zurück, das als Bitmuster interpretiert werden muß. Eine vollständige Definition aller von _control87 zurückgelieferten Bits finden Sie in der Header-Datei float.h.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


cos, cosl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double cos(double x);

long double cosl(long double x);

Beschreibung

Berechnet den Cosinus des Arguments.

cos erwartet einen Winkel in der Einheit rad als Argument und liefert den dazugehörigen Cosinus zurück.

cosl ist die long double-Version und erwartet ein Argument vom Typ long double. Sie liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

Für ein reelles Argument liefert cos Werte im Bereich von -1 bis +1 zurück. Die Fehlerbehandlung für cos und cosl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
cos	+	+	+	+	+	+	+
cosl	+		+	+			+


cosh, coshl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double cosh(double x);

long double coshl(long double x);

Beschreibung

Berechnet den Cosinus hyperbolicus des Arguments.

cosh berechnet den Cosinus hyperbolicus [image]. coshl ist die long double-Version und erwartet ein Argument vom Typ long double. Sie liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

Bei fehlerfreier Ausführung liefert cosh den Cosinus hyperbolicus des Arguments.

Bei Überläufen liefert cosh den Wert HUGE_VAL und coshl den Wert _LHUGE_VAL (jeweils mit korrektem Vorzeichen) zurück, und die globale Variable errnowird auf ERANGE (Ergebnis außerhalb des Rechenbereichs) gesetzt. Die Fehlerbehandlung für cosh und coshl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
cosh	+	+	+	+	+	+	+
coshl	+		+	+			+


cprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int cprintf(const char *format[, argument, ...]);

Beschreibung

Gibt eine formatierte Ausgabe auf den Bildschirm aus.

cprintf übernimmt eine Reihe von Argumenten, auf die jeweils eine Formatierungsanweisung angewendet wird. Die Formatierungsanweisungen sind in dem String enthalten, auf den format zeigt. Die so formatierten Daten werden direkt im aktuellen Textfenster ausgegeben. Die Anzahl der übergebenen Argumente muß mit der der Formatierungsanweisungen übereinstimmen.

Weitere Details über Formatierungsanweisungen finden Sie unter printf-Formatierungsanweisungen.

Abhängig vom Wert der globalen Variablen _directvideo, wird der String entweder direkt in den Bildschirmspeicher geschrieben oder über den Umweg eines BIOS-Aufrufs ausgegeben.

Anders als bei fprintf und printf wird keine Übersetzung des Zeichens \n (Zeilenvorschub) in \r\n (Wagenrücklauf/Zeilenvorschub) vorgenommen. Ebenso wird das Zeichen \t (Tabulator) nicht in Leerzeichen umgewandelt.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

cprintf liefert die Anzahl der ausgegebenen Zeichen zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


cputs

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int cputs(const char *str);

Beschreibung

Gibt einen String auf den Bildschirm aus.

cputs schreibt den nullterminierten String str auf den Bildschirm in das aktuelle Textfenster. Diese Funktion erzeugt keinen automatischen Zeilenvorschub am Ende der Ausgabe.

Abhängig vom Wert der globalen Variablen directvideo, wird der String entweder direkt in den Bildschirmspeicher geschrieben oder über den Umweg eines BIOS-Aufrufs ausgegeben. Anders als bei puts wird keine Übersetzung des Zeichens \n (Zeilenvorschub) in \r\n (Wagenrücklauf/Zeilenvorschub) vorgenommen.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

cputs liefert das zuletzt geschriebene Zeichen zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_creat, _wcreat

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _creat(const char *path, int amode);

int _wcreat(const wchar_t *path, int amode);

Beschreibung

Erzeugt eine neue Datei oder überschreibt eine bereits vorhandene Datei.

Hinweis:	Beachten Sie, daß ein Backslash in einem Pfadnamen '\\' erfordert.

_creat erzeugt einen neue Datei oder leitet das Überschreiben einer existierenden Datei ein, die durch path bezeichnet wird. Der Parameter amode wird nur bei neuen Dateien ausgewertet.

Mit _creat erzeugte Dateien werden grundsätzlich in dem durch die globale Variable _fmode gesetzten Modus (O_TEXT oder O_BINARY) erzeugt.

Existiert eine Datei des angegebenen Namens noch nicht, wird sie von _creat erzeugt. Wenn die Datei bereits existiert und das Schreiben-Attribut gesetzt ist, wird sie auf null Bytes verkürzt, und die Dateiattribute bleiben unverändert. Falls bei der Datei das Nur-Lesen-Attribut gesetzt ist, bricht _creat mit einem Fehler ab, und die Datei bleibt unverändert.

Ein Aufruf von _creat überprüft nur das S_IWRITE-Bit von amode. Ist dieses Bit 1, kann in die Datei geschrieben werden, ist das Bit 0, ist nur das Lesen erlaubt. Alle anderen Dateiattribute des Betriebssystems werden auf 0 gesetzt.

Die folgenden Konstanten sind in sys\stat.h für amode definiert:

Wert von amode 	Zugriffsberechtigung

S_IWRITE	Schreiben erlaubt

S_IREAD	Lesen erlaubt

S_IREAD|S_IWRITE	Lesen und Schreiben erlaubt (Die Berechtigung zum Schreiben impliziert die Leseberechtigung.)

Rückgabewert

Wenn die angegebene Datei fehlerfrei geöffnet werden konnte, liefert _creat das neue Datei-Handle (einen positiven Integerwert) zurück.

Im Fehlerfall wird -1 geliefert, und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht erlaubt

ENOENT	Pfad/Datei nicht gefunden

EMFILE	Zu viele Dateien bereits offen


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


creatnew

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int creatnew(const char *path, int mode);

Beschreibung

Erzeugt eine neue Datei.

creatnew arbeitet wie _rtl_creat - mit einer Ausnahme: Wenn die angegebene Datei bereits existiert, wird mit einer Fehlermeldung abgebrochen; die Datei bleibt dann unverändert.

Das Argument mode kann gleich Null oder eine ODER-Kombination der folgenden in dos.h definierten Konstanten:

FA_HIDDEN	Verborgene Datei

FA_RDONLY	Nur-Lesen-Attribut

FA_SYSTEM	Systemdatei

Rückgabewert

Wenn die angegebene Datei fehlerfrei geöffnet werden konnte, liefert creatnew das neue Datei-Handle (einen positiven Integerwert) zurück.

Im Fehlerfall wird -1 zurückgeliefert, und die globale Variable errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht erlaubt

EEXIST	Datei existiert bereits

EMFILE	Zu viele Dateien bereits offen

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


creattemp

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int creattemp(char *path, int attrib);

Beschreibung

Erzeugt eine neue Datei im angegebenen Verzeichnis, wobei die Namensvergabe automatisch erfolgt.

Mit creattemp erzeugte Dateien werden grundsätzlich in dem durch die globale Variable _fmode gesetzten Modus (O_TEXT oder O_BINARY) erzeugt.

path ist ein mit Backslash abgeschlossener Pfadname. Das als path übergebene Argument bezeichnet ein Verzeichnis, endet mit einem umgekehrten Schrägstrich und sollte lang genug für den resultierenden Dateinamen sein. Achtung: Durch creattemp erzeugte Dateien werden nach dem Ablauf des Programms nicht automatisch gelöscht!

Der Funktion creattemp kann mit attrib ein Wort mit DOS-Dateiattributen übergeben werden. Nach einer fehlerfreien Erzeugung zeigt der Dateizeiger auf den Anfang der Datei. Die Datei wird für Lese- und Schreibzugriffe geöffnet.

Der Parameter attrib kann gleich null oder eine ODER-Kombination der folgenden in dos.h definierten Konstanten sein:

FA_HIDDEN	Verborgene Datei

FA_RDONLY	Nur-Lesen-Attribut

FA_SYSTEM	Systemdatei

Rückgabewert

Wenn die angegebene Datei fehlerfrei erstellt werden konnte, liefert creattemp das neue Datei-Handle (einen positiven Integerwert) zurück.

Im Fehlerfall wird -1 zurückgeliefert, und die globale Variable errno enthält einen der folgenden Werte:

EACCES	Zugriff nicht erlaubt

EMFILE	Zu viele Dateien bereits offen

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_crotl, _crotr

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

unsigned char _crotl(unsigned char val, int count);

unsigned char _crotr(unsigned char val, int count);

Beschreibung

Rotiert einen unsigned char-Wert nach links oder rechts.

Die Funktionen _crotl und _crotr rotieren den übergebenen Wert val um count Bits nach links bzw. rechts.

Das Argument val ist ein unsigned char-Wert oder seine dezimale oder hexadezimale Entsprechung.

Rückgabewert

Die Funktion liefert den rotierten Wert zurück:

_crotl liefert den um count Bits nach links rotierten Wert von val zurück.

_crotl liefert den um count Bits nach rechts rotierten Wert von val zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+


cscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int cscanf(char *format[, address, ...]);

Beschreibung

Liest und formatiert Eingaben von der Tastatur.

cscanf liest mehrere Eingabefelder zeichenweise direkt von der Tastatur ein. Jedes Feld wird dabei entsprechend einer Formatierungsanweisung formatiert, der cscanf im Formatstring format übergeben wird. Die formatierten Eingaben werden an Adressen, die nach dem Parameter format angegeben werden, gespeichert und direkt auf dem Bildschirm ausgegeben. Die Anzahl der übergebenen Adressen und der Formatierungsanweisungen muß übereinstimmen.

Hinweis:	Details zu Formatierungsanweisungen finden Sie unter scanf-Formatierungsanweisungen.

cscanf kann das Lesen eines bestimmten Eingabefeldes stoppen, bevor das normale Feldende (ein Whitespace-Zeichen) erreicht ist, oder auch den Lesevorgang vollständig abbrechen. Die möglichen Ursachen hierfür werden unter scanf erläutert.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

cscanf liefert die Anzahl der fehlerfrei gelesenen und gespeicherten Felder zurück. Gelesene, aber nicht gespeicherte Felder werden nicht mitgezählt. Wurden überhaupt keine Eingabefelder gespeichert, so wird der Wert 0 zurückgegeben.

Der Versuch, über das Ende einer Datei hinauszulesen, liefert den Wert EOF.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


ctime, _wctime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

char *ctime(const time_t *time);

wchar_t *_wctime(const time_t *time);

Beschreibung

Konvertiert Datum und Uhrzeit in einen String.

ctime konvertiert den Zeitwert, auf den time zeigt (das ist der Wert, der von der Funktion time geliefert wird). Das Ergebnis von ctime ist ein String mit 26 Zeichen, der mit einem Zeilenvorschub und einem Nullzeichen abgeschlossen ist:

Mon Nov 21 11:31:54 1983\n\0

Alle Felder dieses Strings haben eine konstante Länge.

Die globale long-Variable _timezone enthält den Unterschied zwischen der lokalen Zeit und der Greenwich Mean Time (GMT) in Sekunden (für MEZ ist _timezone -1*60*60). Die globale Variable _daylight darf nur dann auf einen Wert ungleich Null gesetzt werden, wenn die Standardkonvertierung der USA für Sommer- und Winterzeit angewendet werden soll. Diese Variablen werden nicht vom einem Benutzerprogramm direkt, sondern von der Funkton tzset gesetzt

Rückgabewert

ctime liefert einen Zeiger auf einen Zeichen-String zurück, der Datum und Uhrzeit enthält und mit jedem Aufruf dieser Funktion erneut gesetzt wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


cwait

Siehe auch	Beispiel	Portabilität

Syntax

#include <process.h>

int cwait(int *statloc, int pid, int action);

Beschreibung

Wartet auf das Ende eines untergeordneten Prozeßes.

Die Funktion cwait wartet auf das Ende eines untergeordneten Prozeßes mit der Prozeß-ID pid. An der Adresse statloc wird (sofern nicht NULL) der Status des beendeten Prozesses gespeichert. Über den Parameter action wird festgelegt, ob nur auf das Ende des angegebenen Prozesses oder auch auf das seiner untergeordneten Prozesse gewartet wird.

Wird der untergeordnete Prozeß normal beendet (durch Aufruf von exit oder Rücksprung aus main), so wird das Statuswort wie folgt definiert:

Bit 0-7	Null

Bit 8-15	Das niederwertige Byte des Rückgabewertes des untergeorneten Prozesses. Das ist der durch exit oder den Rücksprung aus main erhaltene Wert. Wird der untergeornete Prozeß durch einfachen Rücksprung aus main (ohne Wert) verlassen, so ist der Inhalt dieser Bits unbestimmt.

Wird der untergeornete Prozeß nicht normal beendet, dann ist das Statuswort wie folgt definiert:

Bits 0-7	Information über die Beendigung des untergeordneten Prozeßes

1	Abbruch durch kritischen Fehler

2	Ausführungfehler, Schutzverletzung

3	Externes Signal

Bits 8-15	Null

Ist pid gleich Null, so wartet cwait auf das Ende aller untergeordneten Prozesse. Andernfalls enthält pid die Prozeß-ID des untergeordneten Elements, auf das gewartet wird. Diesen Wert muß man durch einen vorherigen Aufruf einer asynchronen spawn-Funktion ermittelt haben.

Gültige Wert für action sind WAIT_CHILD (nur auf den angegebenen Prozeß warten) und WAIT_GRANDCHILD (auf den angegebenen Prozeß und alle seine untergeordneten Elemente warten). Beide Werte sind in der Header-Datei process.h definiert.

Rückgabewert

Bei einer normalen Beendigung des untergeordneten Prozeßes liefert cwait die Prozeß-ID des untergeordneten Elements zurück.

Bei einer anormalen Beendigung des untergeordneten Prozeßes liefert die Funktion -1 an den übergeordneten Prozeß zurück und setzt errno auf EINTR (anomales Ende des Prozeßes).

Wenn cwait zurückkehrt, ohne daß ein untergeordneter Prozeß beendet wurde, so liefert die Funktion -1 zurück und setzt errno auf einen der folgenden Werte:

ECHILD	Kein untergeordnetes Element vorhanden oder pid ungültig

EINVAL	Wert für action ist ungültig


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


delline

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void delline(void);

Beschreibung

Entfernt eine Zeile im Textfenster.

delline löscht die Zeile, in der sich der Cursor befindet, und verschiebt danach alle Zeilen unter der gelöschten um eine Position nach oben. delline arbeitet im aktuellen Textfenster.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


difftime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

double difftime(time_t time2, time_t time1);

Beschreibung

Berechnet die Differenz zwischen zwei Zeitangaben.

difftime berechnet die zwischen time1 und time2 liegende Zeit in Sekunden.

Rückgabewert

difftime liefert die Differenz zweier Zeiten als double-Wert zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


disable, _disable, enable, _enable

Beispiele	Portabilität

Syntax

#include <dos.h>

void disable(void);

void _disable(void);

void enable(void);

void _enable(void);

Beschreibung

Deaktiviert und aktiviert Hardware-Interrupts.

Diese Makros ermöglichen dem Programmierer eine flexible Steuerung der Hardware-Interrupts.

Die Makros disable und _disable deaktivieren alle Hardware-Interrupts. Lediglich NMIs (nicht maskierbare Interrupts) von Peripheriegeräten werden noch bearbeitet.

Die Makros enable und _enable aktivieren alle Hardware-Interrupts.

Rückgabewert

Keiner.


Beispiele

disable

_disable

enable

_enable


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


div

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

div_t  div(int numer, int denom);

Beschreibung

Dividiert zwei ganzzahlige Werte und liefert den Quotienten und den Divisionsrest zurück.

div dividiert die als numer (Dividend) und denom (Divisor) übergebenen Integerwerte und liefert Quotienten und Divisionsrest in einer Struktur des Typs div_t zurück. Dieser Datentyp ist in stdlib.h (mittels typedef) folgendermaßen definiert:

typedef struct {

   int quot;      /* Quotient (Divisionsergebnis) */

   int rem;       /* Divisionsrest */

} div_t;

Rückgabewert

div liefert eine Struktur mit den Elementen quot (Quotient) und rem (Divisionsrest) zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


dup

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int dup(int handle);

Beschreibung

Verdoppelt ein Handle für eine Datei.

dup erzeugt aus einem Datei-Handle ein zweites Handle, das mit dem Original folgende Gemeinsamkeiten hat:

die offene Datei bzw. das Gerät;

den Dateizeiger (ändert man den Dateizeiger des einen Handle, so ändert man auch den des anderen);

die Zugriffsberechtigungen (Lesen, Schreiben, Lesen und Schreiben).

handle ist ein Datei-Handle, das man durch einen Aufruf von _rtl_creat, creat, _rtl_open, open, dup oder dup2 erhalten hat.

Rückgabewert

dup liefert bei fehlerfreier Ausführung das neu erzeugte Datei-Handle als nicht-negativen Integerwert zurück.

Im Fehlerfall liefert die Routine den Wert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EBADF	Ungültiges Handle

EMFILE	Zu viele offene Dateien


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


dup2

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int dup2(int oldhandle, int newhandle);

Beschreibung

Bildet das Datei-Handle (oldhandle) auf dem existierendem Datei-Handle (newhandle) ab.

dup2 erzeugt aus einem Handle ein zweites, das mit dem Original folgende Gemeinsamkeiten hat:

die offene Datei bzw. das Gerät;

den Dateizeiger (ändert man den Dateizeiger des einen Handle, so ändert man auch den des anderen);

die Zugriffsberechtigungen (Lesen, Schreiben, Lesen und Schreiben).

dup2 erzeugt ein neues Handle mit dem Wert von newhandle. Ist die mit newhandle verbundene Datei beim Aufruf von dup2 geöffnet, wird sie geschlossen.

newhandle und oldhandle sind Datei-Handles, die durch Aufrufe von creat, open, dup oder dup2 erzeugt wurden.

Rückgabewert

dup2 liefert bei fehlerfreier Ausführung den Wert 0 zurück. Im Fehlerfall liefert die Routine den Wert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

  EBADF	Ungültiges Handle

  EMFILE	Zu viele offene Dateien


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


ecvt

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *ecvt(double value, int ndig, int *dec, int *sign);

Beschreibung

Konvertiert eine Gleitkommazahl in einen String.

ecvt konvertiert value in einen aus ndig Ziffern bestehenden nullterminierten String, der mit der höchstwertigen Ziffer (links) beginnt. ecvt liefert einen Zeiger auf diesen String zurück. Über dec wird die Position des Dezimalpunkts relativ zum Beginn des Strings zurückgeliefert. (Negative Werte bedeuten hier, daß sich der Dezimalpunkt links vom Stringanfang befindet.). Der String selbst enthält keinen Dezimalpunkt. Wenn value negativ ist, dann setzt ecvt das über sign adressierte Wort auf einen Wert ungleich Null (für positive Werte von value ist *sign == 0). Die letzte Ziffer des zurückgelieferten Strings ist gerundet.

Rückgabewert

ecvt liefert einen Zeiger auf diesen statischen String zurück, dessen Inhalt durch jeden Aufruf von fcvt und ecvt überschrieben wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_ _emit_ _

Beispiel	Portabilität

Syntax

#include <dos.h>

void _ _emit_ _(argument, ...);

Beschreibung

Fügt Literale direkt in den Objektcode ein.

__emit__ ist eine Inline-Funktion, die das direkte Einfügen von Literalen während des Compilierens eines Objektcodes ermöglicht. Die Funktion dient zur Erzeugung von Assembler-Anweisungen ohne Verwendung eines Assemblers.

Im allgemeinen wird man als Argumente für __emit__ einzelne Bytes (d.h. Prozessorbefehle) verwenden. Es lassen sich aber auch wesentlich komplexere Konstrukte bilden -- inklusive Zugriffen auf C-Variablen.

Sie sollten diese Funktion nur verwenden, wenn Sie mit der Maschinensprache der 8086-Prozessorfamilie vertraut sind. Sie können mit Hilfe dieser Funktion beliebige Bytes in den Befehlscode einer Funktion einfügen. Ein einziges fehlerhaftes Byte kann zu unerwartetem Verhalten Ihres Programms und auch ohne weiteres zu einem Systemabsturz führen. Der Borland C++ Compiler unternimmt keinen Versuch, die eingefügten Byte-Folgen auf formale Korrektheit oder in irgendeiner anderen Weise zu prüfen. Ebenso bemerkt der Borland C++ Compiler nicht, ob Sie Maschinenbefehle einfügen, die den Inhalt von Prozessorregistern oder des Speichers ändern. Anders als bei der Verwendung von Inline-Assembler, wo beispielsweise die Benutzung der Register SI und DI erkannt wird, ergreift der Compiler keine Maßnahmen zur Sicherung von Registerinhalten. Der korrekte Einsatz dieser Funktion liegt ausschließlich in der Verantwortung des Programmierers.

__emit__ erwartet zumindest ein Argument, es können aber beliebig viele übergeben werden. Die Argumente für diese Funktion werden nicht wie Argumente bei normalen Funktionsaufrufen behandelt, da keinerlei Konvertierungen durchgeführt werden.

Die Parameter dieser Funktion unterliegen denselben Beschränkungen wie Initialisierungswerte statischer Objekte: Es dürfen Integer- und Gleitkommakonstanten und die Adressen statischer Objekte verwendet werden. Die Werte dieser Ausdrücke werden exakt an der Stelle des Aufrufs in den Objektcode genauso geschrieben, als dienten sie zur Initialisierung von Daten. Es darf auch die Adresse eines Parameters oder einer automatischen Variablen plus oder minus einem konstanten Offset verwendet werden. Für diese Argumente wird der Offset der Variablen vom BP-Register gespeichert.

Die Anzahl der im Objektcode gespeicherten Bytes hängt, abgesehen von folgenden Einschränkungen, vom Typ des jeweiligen Arguments ab:

eine vorzeichenbehaftete Integer-Konstante (zum Beispiel: 0x90) wird als ein Zeichen behandelt, wenn sie im Bereich zwischen 0 und 255 liegt;

für die Adresse einer automatischen Variablen oder eines Parameters wird ein Byte geschrieben, wenn der Offset der Variablen vom BP-Register zwischen -128 und 127 liegt, andernfalls wird ein Wort (2 Bytes) geschrieben.

Ein einfaches Byte schreiben Sie so:

__emit__ (0x90);

Falls Sie ein Wort einfügen wollen, dessen Wert kleiner als 255 ist, wandeln Sie den Typ einfach mit einer der beiden folgenden Methoden in unsigned um:

__emit__ (0xB8, (unsigned)17);

__emit__ (0xB8, 17u);

Zwei bzw. vier Byte lange Adressen können durch die Typumwandlung einer Adresse in void near* bzw. void far* erzwungen werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_endthread

Siehe auch	Beispiele	Portabilität

Syntax

#include <process.h>

void _endthread(void);

Beschreibung

Beendet die Ausführung eines Threads.

Die Funktion _endthread beendet den aktuell ausgeführten Thread, der zuvor mit einem Aufruf von _beginthread oder von _beginthreadNT.gestartet wurde.

Diese Funktion ist nur in den Multi-Thread Bibliotheken verfügbar.

Rückgabewert

Keiner.


Beispiele

_beginthread (Win32s version)

_beginthreadNT (Windows NT version)


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


eof

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int eof(int handle);

Beschreibung

Prüft, ob das Ende einer Datei erreicht ist.

eof prüft, ob der Dateizeiger der durch handle bezeichneten Datei am Dateiende steht.

Rückgabewert

Wenn das Ende der Datei erreicht ist, liefert eof den Wert 1, ansonsten den Wert 0. Der Rückgabewert -1 zeigt einen Fehler an, die globale Variable errno erhält in diesem Fall den Wert

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


execl, execle, execlp, execlpe, execv, execve, execvp, execvpe

Siehe auch	Beispiele	Portabilität

Syntax

#include <process.h>

int execl(char *path, char *arg0 *arg1, ..., *argn, NULL);

int _wexecl(wchar_t *path, wchar_t *arg0 *arg1, ..., *argn, NULL);

int execle(char *path, char *arg0, *arg1, ..., *argn, NULL, char **env);

int _wexecle(wchar_t *path, wchar_t *arg0, *arg1, ..., *argn, NULL, wchar_t **env);

int execlp(char *path, char *arg0,*arg1, ..., *argn, NULL);

int _wexeclp(wchar_t *path, wchar_t *arg0,*arg1, ..., *argn, NULL);

int execlpe(char *path, char *arg0, *arg1, ..., *argn, NULL, char **env);

int _wexeclpe(wchar_t *path, wchar_t *arg0, *arg1, ..., *argn, NULL, wchar_t **env);

int execv(char *path, char *argv[]);

int _wexecv(wchar_t *path, wchar_t *argv[]);

int execve(char *path, char *argv[], char **env);

int _wexecve(wchar_t *path, wchar_t *argv[], wchar_t **env);

int execvp(char *path, char *argv[]);

int _wexecvp(wchar_t *path, wchar_t *argv[]);

int execvpe(char *path, char *argv[], char **env);

int _wexecvpe(wchar_t *path, wchar_t *argv[], wchar_t **env);

Beschreibung

Funktionen zum Laden und Starten eines anderen Programms.

Die Funktionen der exec...-Familie laden und starten andere Programme, die als untergeordnete Prozeße bezeichnet werden. Wenn ein exec...-Aufruf fehlerfrei ausgeführt werden konnte, überlagert der untergeornete Prozeß (child process) seinen übergeordneten Pprozeß (parent process). Im Hauptspeicher muß genügend Platz sein, um den untergeordneten Prozeß laden und ausführen zu können.

Der Parameter path gibt den Dateinamen des untergeordneten Prozeßes an - verwendet wird der Standard-Suchalgorithmus:

wenn weder eine Namenserweiterung noch ein Punkt angegeben ist, wird zuerst nach Dateien ohne Namenserweiterung gesucht. Wird die Datei nicht gefunden, so wird der Dateiname um EXE erweitert und die Suche erneut gestartet. Wird die Datei wieder nicht gefunden, so wird COM angehängt und abermals gesucht. Schließlich wird die Batch-Datei mit Hilfe des Kommandozeileninterpreters (COMSPEC unter Windows bzw. COMMAND.COM unter DOS) gestartet.

wenn eine Namenserweiterung oder ein Punkt angegeben ist, wird nur nach dem angegebenen Dateinamen gesucht.

Die einzelnen Funktionen der exec...-Familie unterscheiden sich durch die Namensendungen l, v, p und e, wobei jeder dieser Buchstaben auf andere Fähigkeiten hinweist. Es bedeuten:

l	Die Zeiger (arg0, ..., argn) werden in Form einer Liste einzelner Argumente übergeben. Die Listenform wird normalerweise verwendet, wenn die Zahl der zu übergebenden Argumente bekannt und konstant ist.

v	Die Argumentzeiger werden als Zeiger-Array übergeben, das heißt als argv[0], argv[1] ...argv[n]. Diese Form wird normalerweise bei einer variablen Zahl von Argumenten verwendet.

p	Die Funktion sucht inden durch die Umgebungsvariable PATH festgelegten Verzeichnissen nach der Datei. Ohne das Suffix p sucht die Funktion nur im aktuellen Arbeitsverzeichnis. Wenn der Parameter path kein explizites Verzeichnis enthält, dann sucht die Funktion zunächst im aktuellen Verzeichnis und dann in den durch die Umgebungsvariable PATH gesetzte Verzeichnissen.

e	Erlaubt die Übergabe des Zeiger-Array env (d.h. einer eigenen Umgebung für den untergeordneten Prozeß). Über exec…-Varianten ohne e aufgerufene Prozesse verwenden dieselben Umgebungsparameter wie das aufrufende Programm.

Jede Variante der exec...-Familie muß ein oder zwei Argument-spezifische Suffixe (entweder ein l oder ein v) im Namen haben, die weiteren Kombinationen mit p und e sind optional. Zwei Beispiele dazu:

execl verwendet eine Liste von Argumenten, sucht nur das aktuelle Verzeichnis oder das Stammverzeichnis nach dem untergeordneten Prozeß ab und übergibt die Environment-Parameter, die auch für das momentan laufende Programm gültig sind;

execvpe ist eine exec…-Funktion, die ein Array von Argumentzeigern nimmt, PATH in seine Suche nach dem untergeordneten Prozeß miteinschließt und die env-Argumente zur Veränderung der Umgebung des untergeordneten Elements akzeptiert.

Sämtliche exec...-Funktionen müssen zumindest ein Argument an den untergeordneten Prozeß übergeben, nämlich arg0 bzw. argv[0]. Dieses Argument enthält per Konvention eine Kopie von path. Die Übergabe anderer Daten als erstem Parameter wäre aber kein Fehler.

Somit ist das Argument path für den untergeordneten Prozeß verfügbar.

Bei den l-Funktionen zeigt arg0 normalerweise auf path. Die Parameter arg1,...,argn bilden die aus weiteren Strings bestehende neue Argumentliste, die mit einer NULL nach argn beendet werden muß.

Wenn das Suffix e verwendet wird, übergeben Sie durch das Argument env eine Liste der neuen Umgebungseinstellungen. Dieses Argument der Umgebung ist ein Array von Zeigern auf Zeichen. Jedes Element zeigt auf einen durch Null begrenzten Zeichenstring der Form

   envvar = value

mit envvar als Name der Umgebungsvariablen und value als der Wert des Strings, auf den envvar gesetzt ist. Das letzte Element in env ist NULL. Wenn env Null ist, erbt das untergeordnete Element die Umgebungseinstellungen der übergeordneten Elemente.

Die Gesamtlänge von arg0 + arg1 + ... + argn (or of argv[0] + argv[1] + ... + argn[n]) einschließlich der die Argumente trennenden Leerzeichen muß für eine 16-Bit-Anwendung bei weniger wie 128 Bytes sein. Bei 260 Byte für Anwendungen unter Win32 muß der Wert unter 260 Bit liegen. Abschließende Nullzeichen werden nicht mitgezählt.

Wenn die Funktion exec aufgerufen wird, werden offene Dateien im untergeordneten Prozeß nicht geschlossen.

Rückgabewert

Bei fehlerfreier Ausführung kehrt eine Funktion der Art exec... überhaupt nicht zum Programm zurück. Konnte die Funktion des Typs exec...dagegen nicht ausgeführt werden, dann wird -1 zurückgeliefert, und die globale Variable errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht erlaubt

EMFILE	Zu viele offene Dateien

ENOENT	Pfad/Dateiname nicht gefunden

ENOEXEC	exec-Formatfehler

ENOMEM	Nicht genug Platz im Hauptspeicher


Beispiele

execl

execle

execlp

execlpe

execv

execve

execvp

execvpe


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_exit

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void _exit(int status);

Beschreibung

Beendet das laufende Programm.

_exit beendet das Programm, ohne Dateien zu schließen, Ausgabepuffer zu leeren oder Exit-Funktionen aufzurufen.

_exit beendet das Programm mit dem als status angegebenen Exit-Code, der vom aufrufenden Prozeß geprüft werden kann. Der Wert 0 steht normalerweise für eine fehlerfreie Ausführung, Werte ungleich 0 signalisieren Fehler.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


exit

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void exit(int status);

Beschreibung

Beendet das laufende Programm.

exit beendet den aufrufenden Prozeß. Vor dem Rücksprung werden sämtliche Dateipuffer (die auf die Ausgabe warten) geschrieben, offene Dateien geschlossen und (mit atexit) festgelegten und registrierten Exit-Funktionen aufgerufen.

Die Funktion beendet das Programm mit dem als status angegebenen Exit-Code, der vom aufrufenden Prozeß geprüft werden kann. Der Wert 0 steht normalerweise für eine fehlerfreie Ausführung, Werte ungleich 0 signalisieren Fehler. status kann, muß aber nicht einen der folgenden Werte annehmen:

EXIT_FAILURE	Fehlerhaftes Programmende - Signal an das Betriebssystem, daß das Programm mit einem Fehler endete.

EXIT_SUCCESS	Normales Programmende.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


exp, expl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double exp(double x);

long double expl(long double x);

Beschreibung

Berechnet die Exponentialfunktion ex.

expl ist die long double-Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

exp liefert ex zurück. Falls die Argumente zu nicht berechenbaren Resultaten führen, werden die folgenden Fehlerbedingungen erzeugt: Bei einem Überlauf liefert exp HUGE_VAL und expl _LHUGE_VAL. Die globale Variable errno wird in diesen Fällen auf folgenden Wert gesetzt:

ERANGE	Ergebnis außerhalb des Rechenbereichs

Bei einem Unterlauf liefern exp und expl 0.0 zurück, die globale Variable errno wird nicht verändert. Die Fehlerbehandlung für exp und expl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
exp	+	+	+	+	+	+	+
expl	+		+	+			+


_expand

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

void *_expand(void *block, size_t size);

Beschreibung

Vergrößert oder verkleinert einen Heap-Speicherblock.

Diese Funktion versucht die Größe des bereits reservierten Speicherblocks block zu ändern, ohne ihn dabei zu verschieben. Die im Speicherblock enthaltenen Daten werden bis hin zum Minimum der alten und neuen Bereichsgröße nicht geändert. Der Speicherblock muß durch einen vorhergehenden Aufruf von malloc, calloc oder realloc reserviert und darf noch nicht wieder freigegeben worden sein.

Rückgabewert

Konnte die Größe des Speicherblocks ohne Verschiebung geändert werden, so liefert _expand die (unveränderte) Adresse des Speicherblocks zurück. Andernfalls wird ein Nullzeiger zurückgeliefert, und die Größe des Speicherbereichs bleibt unverändert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


fabs, fabsl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double fabs(double x);

long double fabsl(long double x);

Beschreibung

Berechnet den absoluten Wert einer Gleitkommazahl.

fabs berechnet den absoluten Betrag des Arguments x vom Typ double. fabsl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double.

Rückgabewert

fabs und fabsl liefern den absoluten Betrag von x zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
fabs	+	+	+	+	+	+	+
fabsl	+		+	+			+


fclose

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fclose(FILE *stream);

Beschreibung

Schließt einen Stream.

fclose schließt den durch stream angegebenen Stream, wobei alle zum Stream gehörenden Puffer zuvor auf Diskette bzw. Platte geschrieben werden. Vom System reservierte Puffer werden durch fclose freigegeben. Puffer, die mit setbuf oder setvbuf zugeordnet wurden, werden nicht automatisch freigegeben (es sei denn, beim Aufruf von setvbuf wurde als Pufferzeiger der Wert NULL übergeben).

Rückgabewert

fclose liefert bei fehlerfreier Ausführung den Wert 0, im Fehlerfall den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_fcloseall

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fcloseall(void);

Beschreibung

Schließt offene Streams.

fcloseall schließt sämtliche offenen Streams außer

stdin

stdout

stdprn

stderr

stdaux

Hinweis:	Die Streams stdprn und stdaux sind unter OS/2 und Win32 nicht verfügbar.

Rückgabewert

fcloseall liefert bei fehlerfreier Ausführung die Anzahl der geschlossenen Streams zurück, im Fehlerfall den Wert EOF.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


fcvt

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *fcvt(double value, int ndig, int *dec, int *sign);

Beschreibung

Konvertiert eine Gleitkommazahl in einen String.

fcvt konvertiert value in einen nullterminierten String mit ndig Ziffern rechts des Dezimalpunktes. Der String beginnt mit der höchstwertigen Ziffer (links). fcvt gibt einen Zeiger auf diesen String zurück. Über dec wird die Position des Dezimalpunktes relativ zum Beginn des Strings zurückgeliefert (negative Werte bedeuten hier: "Dezimalpunkt befindet sich links vom Stringanfang"). Der String selbst enthält keinen Dezimalpunkt. Wenn value negativ ist, setzt fcvt das über sign adressierte Wort auf einen Wert ungleich null (andernfalls ist *sign == 0).

Die Ziffern werden auf ndig Stellen hinter dem Dezimalpunkt gerundet.

Rückgabewert

fcvt liefert einen Zeiger auf einen statischen String zurück, dessen Inhalt durch jeden Aufruf dieser Funktion (oder von ecvt) neu gesetzt wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_fdopen, _wfdopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

FILE *_fdopen(int handle, char *type);

FILE *_wfdopen(int handle, wchar_t *type);

Beschreibung

Ordnet einem Datei-Handle einen Stream zu.

_fdopen ordnet einem Stream ein Datei-Handle zu, das von creat, dup, dup2 oder open zurückgegeben wurde.

Der Typ des Streams muß zum Modus des Datei-Handles passen.

Der Parameter type kann einen der folgenden Werte annehmen:

Wert	Beschreibung

r	Öffnet die Datei ausschließlich für Leseoperationen. _fdopen gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.

w	Erzeugt eine Datei für Schreiboperationen.

a	Öffnet eine Datei für Schreiboperationen. Falls die Datei bereits existiert, werden weitere Daten an das aktuelle Dateiende angehängt, ansonsten wird sie für Schreiboperationen erzeugt.

r+	Öffnet eine existierende Datei zur Aktualisierung mittels Lese- und Schreiboperationen. _fdopen gibt NULL zurück, wenn die Datei nicht geöffnet werden kann.

w+	Erzeugt eine neue Datei für Lese- und Schreiboperationen.

a+	Öffnet eine Datei zum Lesen und Anhängen neuer Daten durch Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt erhalten, falls nicht, wird sie automatisch erzeugt.

Fügen Sie t an den Wert des Strings type an (beispielsweise rt oder w+t), um anzugeben, daß die angegebene Datei im Textmodus geöffnet oder erzeugt werden soll.

Ebenso fügen Sie b an den Wert des Strings type an (beispielsweise rb oder w+b), um anzugeben, daß die angegebene Datei im Binärmodus geöffnet oder erzeugt werden soll.

Falls t oder b nicht im String type angegeben wird, wird der Modus durch die globale Variable _fmode bestimmt.

Falls _fmode auf O_BINARY eingestellt ist, werden Dateien im Binärmodus geöffnet.

Falls _fmode auf O_TEXT eingestellt ist, werden Dateien im Textmodus geöffnet.

Hinweis:	Die Konstanten O_... sind in FCNTL.H definiert.

Mit r+ und w+ erzeugte Dateien können sowohl gelesen als auch beschrieben werden:

Zwischen einem Wechsel von "Schreiben" nach "Lesen" muß allerdings ein Aufruf von fseek oder rewind stattfinden.

Zwischen einem Wechsel von "Lesen" nach "Schreiben" muß ebenfalls ein Aufruf von fseek oder rewind stattfinden, es sei denn, die Leseoperation hat das Dateiende erreicht.

Rückgabewert

_fdopen liefert bei fehlerfreier Ausführung einen Zeiger auf den neu geöffneten Stream zurück, im Fehlerfall den Wert NULL.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


feof

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int feof(FILE *stream);

Beschreibung

Prüft, ob das Ende eines Streams erreicht ist.

Das Makro feof prüft das Dateiende-Flag des über stream angegebenen Streams. Dieses Flag wird beim Erreichen des Dateiendes automatisch gesetzt. Leseoperationen liefern dann solange dieses Flag, bis rewind aufgerufen oder die Datei geschlossen wird. Vor jeder Schreiboperation in diese Datei wird das Flag gelöscht.

Rückgabewert

feof liefert einen Wert ungleich 0 zurück, wenn das Dateiende-Flag des angegebenen Stream gesetzt ist, ansonsten ist der Rückgabewert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


ferror

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int ferror(FILE *stream);

Beschreibung

Prüft Fehlerbedingungen bei Streams.

ferror ist ein Makro, das den über stream angegebenen Stream auf Schreib- und Lesefehler prüft. Das Fehler-Flag eines Streams bleibt nach einem Fehler solange gesetzt, bis entweder clearerr oder rewind aufgerufen oder der Stream geschlossen wird.

Rückgabewert

ferror liefert einen Wert ungleich null zurück, wenn das Fehler-Flag des angegebenen stream gesetzt ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


fflush

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fflush(FILE *stream);

Beschreibung

Leert einen Stream.

fflush erzwingt bei gepufferten Ausgabe-Streams ein Schreiben eventueller Pufferinhalte. Die Funktion sorgt also dafür, daß ausgegebene Daten in die zugehörige Datei geschrieben werden.

Der durch stream bezeichnete Stream bleibt offen. Auf ungepufferte Streams hat fflush keine Auswirkung.

Rückgabewert

Bei fehlerfreier Ausführung liefert fflush den Wert 0, im Fehlerfall den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


fgetc, fgetwc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fgetc(FILE *stream);

wint_t fgetwc(FILE *stream);

Beschreibung

Liest ein Zeichen aus einem Stream.

fgetc liest das jeweils nächste Zeichen aus dem Eingabe-Stream stream.

Rückgabewert

fgetc konvertiert bei fehlerfreier Ausführung das gelesene Zeichen in einen int-Wert ohne Vorzeichen und liefert diesen zurück. Bei Erreichen des Dateiendes oder im Fehlerfall wird der Wert EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_fgetchar, _fgetwchar

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _fgetchar(void);

wint_t _fgetwchar(void);

Beschreibung

Liest ein Zeichen aus stdin.

Die Funktion _fgetchar liest das jeweils nächste Zeichen aus stdin und liefert es zurück. Sie ist definiert als fgetc(stdin).

Hinweis:	In Win32 GUI-Anwendungen muß stdin umgelenkt werden.

Rückgabewert

_fgetchar konvertiert bei fehlerfreier Ausführung das gelesene Zeichen in einen int-Wert ohne Vorzeichen und liefert diesen zurück. Bei Erreichen des Dateiendes oder im Fehlerfall wird der Wert EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


fgetpos

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fgetpos(FILE *stream, fpos_t *pos);

Beschreibung

Ermittelt die aktuelle Position des Dateizeigers einer Datei.

fgetpos speichert die Position des zu stream gehörigen Dateizeigers in *pos. Der Wert wird speziell codiert und ist nur als Parameter für einen folgenden Aufruf von fsetpos sinnvoll.

Rückgabewert

fgetpos liefert bei fehlerfreier Ausführung 0 zurück. Im Fehlerfall liefert fgetpos einen Wert ungleich null und setzt die globale Variable errno auf

EBADF	Ungültiges Handle

EINVAL	Ungültiges Argument


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


fgets, fgetws

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

char *fgets(char *s, int n, FILE *stream);

wchar_t *fgetws(wchar_t *s, int n, FILE *stream); // Unicode-Version

Beschreibung

Liest einen String aus einem Stream.

fgets liest einen String aus stream in den durch s angegebenen String und bricht ab, wenn entweder ein Zeilenvorschub (\n) gelesen wird oder n-1 Zeichen gelesen wurden. Der Zeilenvorschub wird am Ende von s gespeichert. Anschließend hängt fgets automatisch ein Nullzeichen (\0) an, um das Ende des Strings zu markieren.

Rückgabewert

fgets liefert bei fehlerfreier Ausführung den durch s bezeichneten String zurück. Bei Erreichen des Dateiendes oder im Fehlerfall ist der Rückgabewert NULL.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


filelength

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

long filelength(int handle);

Beschreibung

Ermittelt die Länge einer Datei in Bytes.

filelength liefert die Länge der über handle angegebenen Datei in Bytes zurück.

Rückgabewert

Bei fehlerfreier Ausführung liefert filelength die Dateigröße in Bytes als long-Wert. Im Fehlerfall liefert filelength -1 zurück und setzt die globale Variable errno auf

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_fileno

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _fileno(FILE *stream);

Beschreibung

Liefert das zu einem Stream gehörende Datei-Handle.

_fileno ist ein Makro, das das Handle des über den Parameter stream angegebenen Streams zurückliefert. Wenn stream mehr als ein Handle zugeordnet ist, wird das beim ersten Öffnen des Streams vergebene Handle zurückgeliefert.

Rückgabewert

_fileno liefert das zu stream gehörende Datei-Handle als Integer zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_findfirst
_findfirst, _wfindfirst

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int _findfirst(const char *pathname, struct ffblk *ffblk, int attrib);

int _wfindfirst(const wchar_t *pathname, struct _wffblk *ffblk, int attrib);

Beschreibung

Durchsucht ein Dateiverzeichnis.

_findfirst startet in einem Verzeichnis die Suche nach Dateien, die über Attribute oder Platzhalter angegeben werden.

Der Parameter pathname ist ein String, der den Pfad zur gesuchten Datei bezeichnet. Nur in dem Teil des Strings, der den Dateinamen enthält, sind Platzhalter (* und ?) erlaubt. Falls eine passende Datei gefunden wird, werden in der über ffblk angegebenen Struktur die im Verzeichnis enthaltenen Dateiinformationen gespeichert.

Wenn Unicode definiert ist, verwendet die Funktion _wfindfirst folgende _wffblk-Struktur.

struct  _wffblk   {

    long            ff_reserved;

    long            ff_fsize;

    unsigned long   ff_attrib;

    unsigned short  ff_ftime;

    unsigned short  ff_fdate;

    wchar_t         ff_name[256];

};

Win16

Für Win16 ist die Struktur ffblk folgendermaßen definiert:

struct ffblk {

   char ff_reserved[21];  /* von DOS reserviert */

   char ff_attrib;        /* gefundenes Attribut */

   int  ff_ftime;         /* Uhrzeit der letzten Änderung */

   int  ff_fdate;         /* Datum der letzten Änderung */

   long ff_fsize;         /* Dateigröße in Byte */

   char ff_name[13];      /* Name der gefundenen Datei */

};

Win32

Für Win32 ist die Struktur ffblk folgendermaßen definiert:

struct ffblk {

   long           ff_reserved[21];

   long           ff_fsize;     /* Dateigröße */

   unsigned long  ff_attrib;    /* gefundenes Attribut */

   unsigned short ff_ftime;     /* Uhrzeit der letzten Änderung */

   unsigned short ff_fdate;     /* Datum der letzten Änderung */

   char           ff_name[256]; /* Name der gefundenen Datei */

};

Über den Parameter attrib wird das Attribut des zu suchenden Eintrags angegeben. attrib kann eine der folgenden Konstanten sein, die in dos.h definiert sind:

FA_RDONLY	Schreibgeschützte Datei

FA_HIDDEN	Verborgene Datei

FA_SYSTEM	Systemdatei

FA_LABEL	Datenträgername

FA_DIREC	Verzeichnis

FA_ARCH	Archiv-Bit

Eine Kombination der obigen Konstanten kann durch eine ODER-Verknüpfung angegeben werden.

Ausführliche Informationen über diese Attribute finden Sie in den Referenzhandbüchern Ihres Betriebssystems.

Beachten Sie, daß ff_ftime und ff_fdate Bitfelder für die aktuelle Uhrzeit und das aktuelle Datum enthalten. Die Struktur dieser Bitfelder ist vom Betriebssystem vorgegeben. Es handelt sich in beiden Fällen um 16-Bit-Strukturen, die in drei Felder unterteilt sind:

ff_ftime:

Bits 0 bis 4	Resultierende Sekunden geteilt durch 2 (d.h. 10 bedeutet hier 20 Sekunden)

Bits 5 bis 10	Minuten

Bits 11 bis 15	Stunden

ff_fdate:

Bits 0 bis 4	Tag

Bits 5 bis 8	Monat

Bits 9 bis 15	Jahre seit 1980 (d.h. 9 bedeutet hier 1989)

Die in io.h definierte Struktur ftime verwendet Datums- und Uhrzeit-Bitfelder mit einer ähnlichen Struktur wie in ff_fdate und ff_ftime.

Rückgabewert

findfirst liefert den Wert 0 zurück, wenn ein zu pathname passender Eintrag gefunden wurde.

Wenn kein Eintrag gefunden wird oder der angegebene Dateiname aus irgendeinem Grund ungültig ist,

wird -1 als Ergebnis geliefert und

die globale Variable errno erhält den Wert

ENOENT	Datei/Pfad nicht gefunden

_doserrno wird in diesem Fall auf einen der folgenden Werte gesetzt:

ENMFILE	Keine weiteren passenden Einträge

ENOENT	Datei/Pfad nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_findnext, _wfindnext

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int _findnext(struct ffblk *ffblk);

int _wfindnext(struct _wffblk *ffblk);

Beschreibung

Setzt die von _findfirst begonnene Suche fort.

Mit _findnext kann nach weiteren Dateien gesucht werden, die zum Parameter pathname einer vorangegangenen _findfirst-Suche passen. ffblk ist die Struktur, die durch findfirst gefüllt wurde und notwendige Informationen zur Fortsetzung der Suche enthält. findnext liefert bei jedem Aufruf einen weiteren Dateinamen zurück, bis das Verzeichnis, das dem dem Parameter pathname entspricht, keine weiteren Dateien mehr enthält.

Rückgabewert

_findnext liefert den Wert 0 zurück, wenn ein weiterer zu pathname passender Eintrag gefunden wurde.

Wenn keine weiteren Einträge mehr vorhanden sind oder der angegebene Dateiname aus irgendeinem Grund ungültig ist, wird -1 geliefert und

errno erhält den Wert

ENOENT	Datei/Pfad nicht gefunden

_doserrno wird auf einen der folgenden Werte gesetzt:

ENMFILE	Keine weiteren passenden Einträge

ENOENT	Datei/Pfad nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


floor, floorl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double floor(double x);

long double floorl(long double x);

Beschreibung

Rundet ab.

floor rundet auf den größten Integerwert ab, der nicht größer als x ist.

floorl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

floor liefert den Integer als double-Wert zurück. floorl liefert den Integer als Wert vom Typ long double zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
floor	+	+	+	+	+	+	+
floorl	+		+	+			+


_flushall

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _flushall(void);

Beschreibung

Leert die Puffer aller Streams.

_flushall löscht alle zu offenen Eingabe-Streams gehörigen Puffer und schreibt alle zu offenen Ausgabe-Streams gehörigen Puffer in ihre jeweiligen Dateien. Die auf _flushall folgenden Leseoperationen lesen aus ihren Eingabedateien neue Daten in die Puffer ein. Durch _flushall werden keine Streams geschlossen.

Rückgabewert

_flushall liefert die Gesamtzahl der offenen Ein- und Ausgabe-Streams als Integerwert zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


fmod, fmodl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double fmod(double x, double y);

long double fmodl(long double x, long double y);

Beschreibung

Berechnet x modulo y, den Rest der Division x/y.

fmod berechnet x modulo y (den Rest f, wobei x = ay + f für einen Integer a und 0 < f < y gilt).

fmodl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

fmod und fmodl liefern den Rest f, wobei x = ay + f gilt (wie beschrieben). Wenn y = 0 gilt, liefern fmod und fmodl den Wert 0 zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
fmod	+	+	+	+	+	+	+
fmodl	+		+	+			+


fnmerge, _wfnmerge

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

void fnmerge(char *path, const char *drive, const char *dir, const char *name, const char *ext);

void _wfnmerge(wchar_t *path, const wchar_t *drive, const wchar_t *dir, const wchar_t *name, const wchar_t *ext );

Beschreibung

Erzeugt einen Pfad aus Einzelkomponenten.

fnmerge erzeugt einen Pfadnamen aus Einzelkomponenten und speichert ihn in dem durch path bezeichneten String. Der neue Pfadname heißt

X:\DIR\SUBDIR\NAME.EXT

wobei gilt:

drive	= X

dir	= \DIR\SUBDIR\

name	= NAME

ext	= .EXT

Falls drive ein leerer String oder NULL ist, wird keine Laufwerksangabe in den Pfadnamen aufgenommen. Ein eventuell am Beginn einer solchen Angabe fehlender Doppelpunkt wird im Pfadnamen automatisch ergänzt.

Falls dir ein leerer String oder NULL ist, wird keine Verzeichnisangabe in den Pfadnamen aufgenommen. Ein eventuell am Beginn einer solchen Angabe fehlender Slash (/ oder \) wird im Pfadnamen automatisch ergänzt.

Falls name ein leerer String oder NULL ist, wird kein Dateiname in den Pfadnamen aufgenommen.

Falls ext ein leerer String oder NULL ist, wird keine Namenserweiterung in den Pfadnamen aufgenommen. Ein eventuell am Beginn einer solchen Angabe fehlender Punkt (.) wird im Pfadnamen automatisch ergänzt.

fnmerge setzt voraus, daß der mit path übergebene String eine ausreichende Größe für den konstruierten Pfadnamen hat. Die Maximalgröße ist durch die in dir.h definierte Konstante MAXPATH festgelegt.

fnmerge und fnsplit verhalten sich komplementär zueinander. Die Anwendung von fnmerge auf die durch fnsplit ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


fnsplit, _wfnsplit

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int fnsplit(const char *path, char *drive, char *dir, char *name, char *ext);

int _wfnsplit(const wchar_t *path, wchar_t *drive, wchar_t *dir, wchar_t *name, wchar_t *ext );

Beschreibung

Zerlegt einen vollständigen Verzeichnisnamen in seine Komponenten.

fnsplit übernimmt einen vollständigen Dateinamen (Parameter path) als String in der Form

X:\DIR\SUBDIR\NAME.EXT

und zerlegt path in seine vier Einzelkomponenten. Diese werden dann in den durch drive, dir, name und ext bezeichneten Strings gespeichert (alle fünf Parameter müssen übergeben werden, einzelne davon dürfen aber NULL sein, was zur Folge hat, daß die zugehörige Komponente zwar analysiert, aber nicht gespeichert wird). Wenn eine Pfadkomponente NULL ist, gehört die Komponente zu einem leeren String, der nicht NULL ist.

Die Maximalgrößen aller beteiligten Strings (inklusive des abschließenden Nullzeichen \0) sind durch die Konstanten MAXDRIVE, MAXDIR, MAXPATH, MAXFILE und MAXEXT in dir.h festgelegt.

Konstante	Max 16-bit	Max 32-bit	String

MAXPATH  	80	260	path

MAXDRIVE	3   	3     	drive inklusive Doppelpunkt (:)

MAXDIR     	66	256	dir inklusive führendem und abschließendem umgekehrten Schrägstrich (\)

MAXFILE   	9	256	name

MAXEXT    	5	256	ext inklusive führendem Punkt (.)

fnsplit unterstellt, daß die durch drive, dir, name und ext bezeichneten Strings eine ausreichende Größe haben, um jede Komponente zu speichern, die nicht NULL ist. fnsplit verteilt die Interpunktionszeichen aus path in folgender Weise:

drive enthält den Laufwerksbezeichner mit einem Doppelpunkt (C:, A: usw.);

dir enthält den führenden und den abschließenden umgekehrten Schrägstrich (\BC4\INCLUDE\, \SOURCE\ usw.);

name enthält den Dateinamen;

ext enthält den Punkt, der die Namenserweiterung einleitet (.C, .EXE usw.).

fnmerge und fnsplit verhalten sich komplementär zueinander. Die Anwendung von fnmerge auf die durch fnsplit ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.

Rückgabewert

fnsplit liefert einen Integerwert zurück, der sich aus fünf in dir.h definierten Flags zusammensetzt. Ein gesetztes Flag zeigt an, daß die zugehörige Komponente in path vorhanden war. Folgende Flags sind in dir.h definiert:

EXTENSION	Eine Namenserweiterung

FILENAME	Ein Dateiname

DIRECTORY	Mindestens ein Verzeichnis

DRIVE	Ein Laufwerksbezeichner

WILDCARDS	Platzhalter (* und/oder ?)


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


fopen, _wfopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

FILE *fopen(const char *filename, const char *mode);

FILE *_wfopen(const wchar_t *filename, const wchar_t *mode);

Beschreibung

Öffnet einen Stream.

fopen öffnet die durch filename bezeichnete Datei und ordnet ihr einen Stream zu. Zurückgeliefert wird ein Zeiger auf den Stream, über den weitere Operationen mit diesem Stream ausgeführt werden können.

Der Parameter mode kann einen der folgenden Werte annehmen:

Wert	Beschreibung

r	Öffnet eine Datei ausschließlich für Leseoperationen.

w	Erzeugt eine Datei für Schreiboperationen. Falls die Datei bereits existiert, wird sie überschrieben.

a	Öffnet eine Datei für Schreiboperationen. Falls die Datei bereits existiert, werden weitere Daten an das aktuelle Dateiende angehängt, ansonsten wird sie automatisch erzeugt.

r+	Öffnet eine Datei für Lese- und Schreiboperationen. Die Datei muß bereits existieren.

w+	Erzeugt eine neue Datei für Lese- und Schreiboperationen. Falls die Datei bereits existiert, wird sie überschrieben.

a+	Öffnet eine Datei zum Lesen und Anhängen neuer Daten durch Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt erhalten, falls nicht, wird sie automatisch erzeugt.

Bei der Öffnung kann zusätzlich explizit angegeben werden, ob die Datei im Textmodus (t) oder binary (b) bearbeitet werden soll. Die Angabe geschieht durch ein einfaches Anhängen des jeweiligen Buchstabens (also wb, w+b, rt, a+t etc.). Im Parameter mode kann bei fopen das Zeichen t bzw. b auch zwischen den Buchstaben und dem Pluszeichen eingefügt werden. So ist beispielsweise rt+ identisch mit r+t.

Wenn die Angabe b oder t im mode-String fehlt, wird der jeweilige Modus durch die globale Variable _fmode bestimmt. Wenn _fmode auf O_BINARY gesetzt ist, werden Dateien im Binärmodus geöffnet. Wenn _fmode auf O_TEXT gesetzt ist, werden sie im Textmodus geöffnet. Die Konstanten O_... sind in der Datei FCNTL.H definiert.

Wenn eine Datei zur Aktualisierung geöffnet ist, können sowohl Eingabe als auch Ausgabe mit dem resultierenden Stream erfolgen.

Zwischen einem Wechsel von "Schreiben" nach "Lesen" muß allerdings ein Aufruf von fseek oder rewind stattfinden.

Zwischen einem Wechsel von "Lesen" nach "Schreiben" muß ebenfalls fseek oder rewind aufgerufen werden, es sei denn, die Leseoperation hat das Dateiende erreicht.

Rückgabewert

fopen liefert bei fehlerfreier Ausführung einen Zeiger auf den neu geöffneten Stream, im Falle eines Fehlers den Wert NULL zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_fpreset

Siehe auch	Portabilität

Syntax

#include <float.h>

void _fpreset(void);

Beschreibung

Initialisiert die Gleitkommafunktionen aus dem Mathematikpaket neu.

_fpreset reinitialisiert die Gleitkommafunktionen aus dem Mathematikpaket und wird normalerweise zusammen mit system, exec... oder spawn... verwendet. Die Funktion wird außerdem bei Gleitkommafehlern vor dem Aufruf von longjmp eingesetzt.

Hinweis:	Wird ein 80x87 Koprozessor im Programm verwendet, kann ein untergeordneter Prozeß (der von system, exec...  oder spawn... gestartet wurde) den Gleitkommastatus seines übergeordneten Prozesses ändern.

Wenn ein 80x87 Koprozessor verwendet wird, sollten daher die folgenden Vorsichtsmaßnahmen getroffen werden:

Die Funktionen system, exec... und spawn... dürfen nicht aufgerufen werden, während ein Gleitkommaausdruck ausgewertet wird.

Nach Aufrufen von system, exec... und spawn... sollte der Gleitkommastatus mit _fpreset zurückgesetzt werden, wenn die Möglichkeit besteht, daß der untergeordnete Prozeß Gleitkommaoperationen mit dem 80x87 durchgeführt hat.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


fprintf, fwprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fprintf(FILE *stream, const char *format[, argument, ...]);

int fwprintf(FILE *stream, const wchar_t *format[, argument, ...]);

Beschreibung

Schreibt formatiert in einen Stream.

fprintf übernimmt eine Folge von Argumenten, wendet auf jedes die im Formatstring (Parameter format) festgelegte Formatierungsanweisung an und schreibt die formatierten Daten in einen Stream. Die Anzahl der Formatierungsanweisungen und der Argumente muß übereinstimmen.

Hinweis:	Weitere Details über Formatierungsanweisungen finden Sie unter printf.

Rückgabewert

fprintf liefert bei fehlerfreier Ausführung die Anzahl der ausgegebenen Bytes, im Fehlerfall den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


fputc, fputwc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fputc(int c, FILE *stream);

wint_t fputwc(wint_t c, FILE *stream);

Beschreibung

Schreibt ein Zeichen in einen Stream.

fputc schreibt das Zeichen c in den durch stream angegebenen Stream.

Hinweis:	In Win32 GUI-Anwendungen muß stdin umgelenkt werden.

Rückgabewert

fputc liefert das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_fputchar, _fputwchar

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _fputchar(int c);

wint_t _fputwchar(wint_t c);

Beschreibung

Schreibt ein Zeichen in stdout.

_fputchar schreibt das Zeichen c in stdout und hat dieselbe Wirkung wie fputc(c, stdout).

In Win32 GUI-Anwendungen muß stdout umgelenkt werden.

Rückgabewert

_fputchar liefert bei fehlerfreier Ausführung das übergebene Zeichen c zurück.

Im Fehlerfall wird der Wert EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	+	 	+


fputs, fputws

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fputs(const char *s, FILE *stream);

int fputws(const wchar_t *s, FILE *stream);

Beschreibung

Schreibt einen String in einen Stream.

fputs schreibt den nullterminierten String s in den angegebenen Ausgabe-Stream. Diese Funktion erzeugt keinen automatischen Zeilenvorschub am Ende der Ausgabe. Das abschließende Nullzeichen (\0) wird nicht ausgegeben.

Rückgabewert

Bei fehlerfreier Ausführung liefert fputs das zuletzt geschriebene Zeichen (einen positiven Wert) zurück.

Im Falle eines Fehlers wird der Wert EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


fread

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t n, FILE *stream);

Beschreibung

Liest Daten aus einem Stream.

fread liest n Datenelemente, die jeweils die Größe size Bytes haben, aus dem angegebenen Stream in den Speicherbereich, auf den ptr zeigt.

Es werden insgesamt (n * size) Bytes gelesen.

Rückgabewert

fread liefert bei fehlerfreier Ausführung die Anzahl der gelesenen Datenelemente (nicht Bytes) zurück.

Im Falle eines Fehlers oder am Dateiende wird die Anzahl von Elementen (möglicherweise 0) zurückgeliefert, die noch fehlerfrei gelesen werden konnten.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


free

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void free(void *block);

Beschreibung

Gibt einen reservierten Speicherblock wieder frei.

free gibt einen zuvor mit calloc, malloc oder realloc reservierten Block wieder frei.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


freopen, _wfreopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

FILE *freopen(const char *filename, const char *mode, FILE *stream);

FILE *_wfreopen(const wchar_t *filename, const wchar_t *mode, FILE *stream);

Beschreibung

Ordnet einem offenen Stream eine neue Datei zu.

freopen ersetzt die zu stream gehörende, offene Datei durch die über den Parameter filename angegebene Datei. Dabei wird - unabhängig vom Erfolg des anschliessenden Öffnens - der Stream in jedem Fall geschlossen. Meistens wird diese Funktion verwendet, um stdin, stdout und stderr eine andere Datei zuzuordnen.

Der Parameterstring mode kann einen der folgenden Werte annehmen:

Wert	Beschreibung

r	Öffnet eine Datei ausschließlich für Leseoperationen.

w	Erzeugt eine Datei für Schreiboperationen.

a	Öffnet eine Datei für Schreiboperationen. Falls die Datei bereits existiert, werden zusätzliche Daten an das aktuelle Dateiende angefügt, ansonsten wird sie automatisch erzeugt.

r+	Öffnet eine Datei für Lese- und Schreiboperationen. Die Datei muß bereits existieren.

w+	Erzeugt eine neue Datei für Lese- und Schreiboperationen.

a+	Öffnet eine Datei zum Lesen und Anhängen neuer Daten durch Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt erhalten, falls nicht, wird sie automatisch erzeugt.

Um zu spezifizieren, daß eine gegebene Datei geöffnet oder im Textmodus erzeugt wurde, wird ein t an den String mode angehängt werden (rt w+t usw.). In ähnlicher Weise wird der Binärmodus spezifiziert, indem ein b an den String mode angehängt wird (wb, a+b usw.).

Wenn die Angabe t oder b fehlt, wird der jeweilige Modus durch die globale Variable _fmode bestimmt, deren Wert über die direkte Zuweisung einer der in fcntl.h definierten Konstanten O_TEXT oder O_BINARY festgelegt werden kann.

Wenn eine Datei zur Aktualisierung geöffnet wurde, können sowohl Eingabe als auch Ausgabe auf dem resultierenden Stream erfolgen:

Zwischen einem Wechsel von "Schreiben" nach "Lesen" muß allerdings ein fseek oder rewind stattfinden.

Zwischen einem Wechsel von "Lesen" nach "Schreiben" muß ebenfalls fseek oder rewind aufgerufen werden, es sei denn, die Leseoperation hat das Dateiende erreicht.

Rückgabewert

freopen liefert bei fehlerfreier Ausführung das Argument stream zurück.

Im Fehlerfall wird der Wert NULL zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


frexp, frexpl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double frexp(double x, int *exponent);

long double frexpl(long double x, int *exponent);

Beschreibung

Ermittelt die Mantisse und den Exponenten einer Gleitkommazahl.

frexp berechnet zu x die Mantisse m (ein double-Wert, dessen absoluter Betrag größer/gleich 0.5 und kleiner als 1.0 ist) und den Integerwert n so, daß die Gleichung x = m * 2n gilt. Der Exponent n wird in dem Integer gespeichert, auf den der Parameter exponent zeigt.

frexpl ist die long double Version. Sie erwartet für x ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

frexp und frexpl liefern die Mantisse m zurück. Die Fehlerbehandlung für frexp und frexpl kann über die Funktionen _matherr und _matherrlmodifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
frexp	+	+	+	+	+	+	+
frexpl	+		+	+			+


fscanf, fwscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fscanf(FILE *stream, const char *format[, address, ...]);

int fwscanf(FILE *stream, const wchar_t *format[, address, ...]);

Beschreibung

Liest und formatiert Eingaben aus einem Stream.

fscanf liest eine Reihe von Eingabefeldern zeichenweise aus einem Stream. Entsprechend den Formatierungsanweisungen, die fscanf im Formatbezeichner format übergeben wurden, wird jedes Feld gelesen, formatiert und an einer Adresse gespeichert, die mit format übergeben wurde. Die Anzahl der Formatierungsanweisungen, der übergebenen Adressen und der Eingabefelder müssen übereinstimmen.

Hinweis:	Unter der Funktion scanf finden Sie eine ausführliche Beschreibung der Formatierungsanweisungen.

fscanf kann das Lesen eines bestimmten Eingabefeldes abbrechen, bevor das normale Feldende (ein Whitespace-Zeichen) erreicht ist. fsanf kann auch aus verschiedenen Gründen den Lesevorgang vollständig abbrechen. Die möglichen Ursachen hierfür werden unter scanf erläutert.

Rückgabewert

fscanf liefert die Anzahl der fehlerfrei gelesenen und gespeicherten Felder zurück. Gelesene, aber nicht gespeicherte Felder werden nicht mitgezählt.

Der Versuch, über das Ende einer Datei hinauszulesen, ergibt den Wert EOF. Wenn überhaupt keine Felder gespeichert wurden, wird 0 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


fseek

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fseek(FILE *stream, long offset, int whence);

Beschreibung

Setzt den Dateizeiger eines Streams auf eine neue Position.

fseek setzt den zu stream gehörenden Dateizeiger auf die neue Position, die offset Bytes von der durch whence angegebenen Dateiposition entfernt ist. Für Streams im Textmodus sollte offset 0 sein oder ein Wert, der von ftell geliefert wurde.

Die Art der Positionierung wird über drei in stdio.h definierte Konstanten für whence festgelegt:

Konstante	whence	Dateiposition

SEEK_SET 	(Wert 0)	Relativ zum Dateianfang

SEEK_CUR 	(Wert 1)	Relativ zur aktuellen Position

SEEK_END 	(Wert 2)	Relativ zum Dateiende

Mit ungetc zurückgestellte Zeichen sind nach fseek nicht mehr erreichbar. Benutzen Sie fseek für Stream-Ein-/Ausgabe und lseek für Datei-Handle-Ein-/Ausgabe.

In Dateien, die für Lese- und Schreiboperationen geöffnet worden sind, kann nach fseek zwischen "Lesen" und "Schreiben" gewechselt werden.

Rückgabewert

fseek liefert bei fehlerfreier Ausführung den Wert 0 zurück, ansonsten einen Wert ungleich Null.

Es ist möglich, daß fseek 0 zurückliefert, obwohl bei der Ausführung der Funktion ein Fehler aufgetreten ist. Dies liegt daran, daß der Zeiger letztendlich von DOS gesetzt und das Ergebnis der Positionierung nicht überprüft wird. fseek gibt nur für ungeöffnete Dateien oder Geräte einen Fehlercode zurück.

Im Fehlerfall wird die globale Variable errno auf einen der folgenden Werte gesetzt:

EBADF	Ungültiger Dateizeiger

EINVAL	Ungültiges Argument

ESPIPE	Suche auf diesem Gerät nicht möglich


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


fsetpos

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int fsetpos(FILE *stream, const fpos_t *pos);

Beschreibung

Positioniert den Dateizeiger eines Streams.

fsetpos setzt den Dateizeiger von stream auf eine neue Position. Die neue Position ist der Wert, der durch einen vorherigen Aufruf von fgetpos für diesen Stream ermittelt wurde. Das zum Stream gehörende Dateiende-Flag wird gelöscht, zuvor mit ungetc zurückgestellte Zeichen sind nach dieser Operation nicht mehr verfügbar.

Die nächste Operation nach einem Aufruf von fsetpos kann sowohl eine Lese- als auch eine Schreiboperation sein.

Rückgabewert

fsetpos liefert bei fehlerfreier Ausführung den Wert 0 zurück. Im Fehlerfall wird ein Wert ungleich Null zurückgeliefert, und die globale Variable errno wird auf einen Wert ungleich Null gesetzt.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


_fsopen, _wfsopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

#include <share.h>

FILE *_fsopen(const char *filename, const char *mode, int shflag);

FILE *_wfsopen(const wchar_t *filename, const wchar_t *mode, int shflag);

Beschreibung

Öffnet einen Stream für gemeinsamen Zugriff.

_fsopen öffnet die durch filename angegebene Datei und ordnet ihr einen Stream zu. _fsopen liefert einen Zeiger zurück, über den bei anschließenden Operationen auf den Stream zugegriffen werden kann.

Der Parameterstring mode kann einen der folgenden Werte annehmen:

Wert	Beschreibung

r	Öffnen ausschließlich für Leseoperationen.

w	Erzeugung einer Datei für Schreiboperationen.

a	Öffnen für Schreiboperationen. Falls die Datei bereits existiert, werden zusätzliche Informationen an das aktuelle Dateiende angefügt, ansonsten wird sie automatisch erzeugt.

r+	Öffnen einer Datei für Lese- und Schreiboperationen. Die Datei muß bereits existieren.

w+	Erzeugung einer neuen Datei für Lese- und Schreiboperationen. Existiert bereits eine Datei des angegebenen Namens, wird sie überschrieben.

a+	Öffnen einer Datei zum Lesen und Anhängen neuer Daten durch Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt erhalten - falls nicht, wird sie automatisch erzeugt.

Um eine gegebene Datei zu identifizieren, die im Textmodus geöffnet oder erzeugt wurde, wird ein t an den String mode angehängt (rt w+t usw.). _fsopen erlaubt also, daß t oder b zwischen dem Buchstaben und dem Zeichen + in den String mode eingefügt werden. Beispielsweise ist rt+ äquivalent zu r+t. Wenn ein t oder b im String mode nicht gegeben ist, wird der String mode von der globalen Variablen _fmode verwaltet. Wenn _fmode auf O_BINARY gesetzt ist, werden Dateien im Binärmodus geöffnet. Wenn _fmode auf O_TEXT gesetzt ist, werden sie im Textmodus geöffnet. Die Konstanten O_... sind in FCNTL.H definiert.

Bei zur Aktualisierung erzeugten Dateien kann in den resultierenden Stream sowohl gelesen als auch geschrieben werden:

Zwischen einem Wechsel von "Schreiben" nach "Lesen" muß allerdings ein fseek oder rewind stattfinden.

Zwischen einem Wechsel von "Lesen" nach "Schreiben" muß ebenfalls fseek oder rewind ausgeführt werden, es sei denn, die Leseoperation hat das Dateiende erreicht.

shflag legt den Typ des gemeinsamen Zugriffs fest, der für die Datei filename zugelassen werden soll. Die symbolischen Konstanten für shflag sind in share.h definiert:

Hinweis:	Der DOS-Befehl SHARE muß ausgeführt worden sein, damit shflag nicht ignoriert wird.

Wert von shflag	Beschreibung

SH_COMPAT	Setzt Kompatibilitätsmodus

SH_DENYRW	Lesen und Schreiben nicht erlaubt

SH_DENYWR	Schreiben nicht erlaubt

SH_DENYRD	Lesen nicht erlaubt

SH_DENYNONE	Lesen und Schreiben erlaubt

SH_DENYNO	Lesen und Schreiben erlaubt

Rückgabewert

_fsopen liefert bei fehlerfreier Ausführung einen Zeiger auf den neu geöffneten Stream zurück.

Im Fehlerfall wird NULL zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


fstat, stat, _wstat

Siehe auch	Beispiele	Portabilität

Syntax

#include <sys\stat.h>

int fstat(int handle, struct stat *statbuf);

int stat(const char *path, struct stat *statbuf);

int _wstat(const wchar_t *path, struct stat *statbuf);

Beschreibung

Liefert Informationen über eine geöffnete Datei.

fstat speichert in der Struktur des Typs stat Informationen über die geöffnete Datei oder das Verzeichnis, die bzw. das mit handle angegeben ist.

Die Funktion stat speichert Informationen über die angegebene Datei oder das Verzeichnis in einer Struktur des Typs stat. Der Dateiname wird durch den Parameter path angegeben.

statbuf zeigt auf eine stat-Struktur, die in sys\stat.h definiert ist und folgende Felder enthält:

st_mode	Bitmuster mit Informationen über den Modus der Datei

st_dev	Nummer des Laufwerks, das die Datei enthält, oder ein Datei-Handle, wenn die Datei auf einemGerät ist

st_rdev	wie st_dev.

st_nlink	immer eine Integerkonstante mit dem Wert 1

st_size	Größe der Datei in Bytes

st_atime	Datum/Uhrzeit des letzten Zugriffs (Windows) oder der letzten Änderung (DOS)

st_mtime	wie st_atime

st_ctime	wie st_atime

Der Strukturtyp stat enthält noch drei weitere Felder, die hier nicht aufgeführt sind, da die enthaltenen Werte nur unter UNIX von Bedeutung sind.

Das Bitmuster st_mode setzt sich aus mehreren Einzelinformationen über die Art der geöffneten Datei zusammen, die die folgenden Bits enthält:

Eines der folgenden Bits ist gesetzt:

S_IFCHR	Wenn handle sich auf ein Gerät bezieht.

S_IFREG	Wenn es sich um eine reguläre Datei handelt.

Eines oder beide der folgenden Bits ist/sind gesetzt:

S_IWRITE	Wenn der Benutzer Schreiberlaubnis hat.

S_IREAD	Wenn der Benutzer Leseerlaubnis hat.

Die Dateisysteme HPFS und NTFS machen zusätzlich folgende Unterschiede:

st_atime	Zeitpunkt des letzten Zugriffs

st_mtime	Zeitpunkt der letzten Änderung

st_ctime	Zeitpunkt, zu dem die Datei angelegt wurde

Rückgabewert

fstat und stat liefern den Wert 0 zurück, wenn sie die Informationen über die geöffnete Datei erfolgreich ermitteln konnten.

Im Fehlerfall ist der Rückgabewert -1, und die globale Variable errno wird auf folgenden Wert gesetzt:

EBADF	Ungültiges Handle


Beispiele

fstat

stat


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


ftell

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

long int ftell(FILE *stream);

Beschreibung

Liefert den aktuellen Dateizeiger.

ftell liefert den aktuellen Dateizeiger von stream zurück. Die Position wird relativ zum Dateianfang in Bytes gemessen (falls es sich um eine Binärdatei handelt). Der von ftell zurückgelieferte Wert kann bei einem nachfolgenden Aufruf von fseek verwendet werden.

Rückgabewert

ftell liefert bei fehlerfreier Ausführung die aktuelle Position des Dateizeigers zurück.

Im Fehlerfall ist der Rückgabewert -1L, und die globale Variable errno wird auf einen der beiden folgenden Werte gesetzt:

EBADF	Ungültiger Dateizeiger

ESPIPE	Illegale Suche auf Gerät


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+  	+	+


ftime

Siehe auch	Beispiel	Portabilität

Syntax

#include <sys\timeb.h>

void ftime(struct timeb *buf)

Beschreibung

Speichert die Systemzeit in einer Struktur des Typs timeb.

Unter UNIX ist ftime nur unter System V verfügbar.

ftime ermittelt die aktuelle Systemzeit und speichert sie in den Feldern der durch buf bezeichneten timeb-Struktur. Der Strukturtyp timeb enthält die vier Felder time, millitm, timezone und dstflag:

struct timeb {

    long  time;

    short millitm;

    short timezone;

    short dstflag;

};

time 	ist die Zeit in Sekunden seit dem 1.1.1970 00:00:00 GMT (Greenwich Mean Time).

millitm 	ist der Bruchteil einer Sekunde in Millisekunden

_timezone 	ist der lokale Zeitunterschied zur GMT in Minuten. Der Zeitunterschied zur GMT wird über die globale Variable _timezone berechnet, deren Wert durch tzset gesetzt wird.

dstflag 	wird auf einen Wert ungleich Null gesetzt, falls in der aktuellen Zeitzone eine Verschiebung durch die Sommerzeit berücksichtigt wird.

Hinweis:	Da ftime die Funktion tzset aufruft, ist es nicht nötig, vor dem Gebrauch von ftime explizit tzset aufzurufen.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_fullpath, _wfullpath

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char * _fullpath(char *buffer, const char *path, int buflen);

wchar_t * _wfullpath(wchar_t *buffer, const wchar_t *path, int buflen);

Beschreibung

Konvertiert einen relativen Pfadnamen in einen absoluten.

_fullpath konvertiert den relativen Pfadnamen in path in einen absoluten Pfadnamen. Dieser wird in dem Zeichen-Array gespeichert, auf das buffer zeigt. buflen gibt an, wieviele Zeichen in buffer gespeichert werden können. _fullpath liefert NULL zurück, wenn der Puffer nicht groß genug für den absoluten Pfadnamen ist oder der Pfad eine ungültige Laufwerksangabe enthält.

Wenn buffer NULL ist, reserviert _fullpath einen Puffer mit bis zu _MAX_PATH Zeichen. Dieser Puffer sollte durch einen Aufruf von free freigegeben werden, wenn er nicht mehr benötigt wird. Die Konstante _MAX_PATH ist in stdlib.h definiert.

Rückgabewert

Bei fehlerfreier Ausführung liefert _fullpath einen Zeiger auf den Puffer zurück, der den absoluten Pfadnamen enthält.

Andernfalls ist das Ergebnis NULL.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


fwrite

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);

Beschreibung

Schreibt Daten in einen Stream.

fwrite fügt n Datenelemente der Größe size Bytes an die durch stream gegebene Datei an. Die zu schreibenden Daten beginnen bei der Adresse, auf die ptr zeigt. Es werden n * size Bytes geschrieben. ptr kann auf beliebige Objekte zeigen.

Rückgabewert

fwrite liefert bei fehlerfreier Ausführung die Anzahl der geschriebenen Datenelemente (nicht Bytes) zurück.

Im Fehlerfall wird die Anzahl in der Form short zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+  	+	+


gcvt

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *gcvt(double value, int ndec, char *buf);

Beschreibung

Konvertiert eine Gleitkommazahl in einen String.

gcvt konvertiert value in einen nullterminierten ASCII-String, der in buf gespeichert wird. Die Funktion versucht, ndec signifikante Ziffern im F-Format von FORTRAN zu erzeugen. Wenn dies nicht möglich ist, liefert sie den Wert im E-Format von printf (druckfertig formatiert). Abschließende NULL-Zeichen werden möglicherweise unterdrückt.

Rückgabewert

gcvt liefert die Adresse des durch buf bezeichneten Strings zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


geninterrupt

Siehe auch	Beispiel	Portabilität

Syntax

#include <dos.h>

void geninterrupt(int intr_num);

Beschreibung

Erzeugt einen Software-Interrupt.

Das Makro geninterrupt löst einen Software-Interrupt für den Interrupt intr_num aus. Der Zustand der Register nach dem Aufruf hängt von dem aufgerufenen Interrupt ab.

Interrupts können Register in einem nicht vorhersehbaren Zustand zurücklassen.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


getc, getwc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int getc(FILE *stream);

wint_t getwc(FILE *stream);

Beschreibung

Liest ein Zeichen aus einem Stream.

getc gibt das nächste Zeichen aus dem gegebenen Eingabe-Stream zurück und erhöht den Dateizeiger des Streams entsprechend, daß dieser auf das nächste Zeichen zeigt.

Hinweis:	In Win32 oder Win32 GUI-Anwendungen muß stdin umgelenkt werden.

Rückgabewert

getc liefert bei fehlerfreier Ausführung das gelesene Zeichen als int ohne Vorzeichenerweiterung zurück.

Am Dateiende oder im Fehlerfall liefert die Funktion EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


getch

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int getch(void);

Beschreibung

Liest ein Zeichen von der Tastatur, ohne es auf dem Bildschirm auszugeben.

getch liest ein einzelnes Zeichen von der Tastatur, ohne es als "Echo" am Bildschirm auszugeben.

Hinweis:	Diese Funktion sollte in Win32 oder Win32 GUI-Anwendungen nicht verwendet werden.

Rückgabewert

getch liefert das von der Tastatur gelesene Zeichen zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+ 	 	 	+


getchar, getwchar

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int getchar(void);

wint_t getwchar(void);

Beschreibung

Liest ein Zeichen aus stdin.

getchar ist ein Makro, das das jeweils nächste Zeichen aus dem Eingabe-Stream stdin liest und zurückliefert. Es ist definiert als getc(stdin).

Hinweis:	In Win32 oder Win32 GUI-Anwendungen sollte diese Funktion nicht verwendet werden.

Rückgabewert

getchar liefert bei fehlerfreier Ausführung das gelesene Zeichen als int-Wert ohne Vorzeichenerweiterung zurück.

Am Dateiende oder im Fehlerfall liefert die Funktion EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+ 	 	+	+	+	+


getche

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int getche(void);

Beschreibung

Liest ein Zeichen von der Tastatur und gibt es auf dem Bildschirm aus.

getche liest ein einzelnes Zeichen von der Tastatur und gibt dieses Zeichen auf dem Bildschirm in das aktuelle Textfenster aus. getche schreibt direkt in den Bildschirmspeicher oder benutzt BIOS-Routinen.

Hinweis:	Diese Funktion sollte in Win32 oder Win32 GUI-Anwendungen nicht verwendet werden.

Rückgabewert

getche liefert das von der Tastatur gelesene Zeichen zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


getcurdir, _wgetcurdir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int getcurdir(int drive, char *directory);

int _wgetcurdir(int drive, wchar_t *directory );

Beschreibung

Ermittelt das aktuelle Verzeichnis eines Laufwerks.

getcurdir ermittelt das aktuelle Verzeichnis auf dem durch drive angegebenen Laufwerk. Wenn drive den Wert 0 hat, wird das aktuelle Laufwerk verwendet, ansonsten gilt A = 1, B = 2 usw. directory zeigt auf einen Speicherbereich der Größe MAXDIR - hier trägt getcurdir den nullterminierten Namen des ermittelten Verzeichnisses ein (ohne führenden Backslash und ohne Laufwerksbezeichner).

Rückgabewert

Bei fehlerfreier Ausführung liefert getcurdir den Wert 0, im Fehlerfall -1 zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


getcwd, _wgetcwd

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

char *getcwd(char *buf, int buflen);

wchar_t *_wgetcwd(wchar_t *buf, int buflen);

Beschreibung

Ermittelt das aktuelle Arbeitsverzeichnis.

getcwd speichert den vollständigen Pfadnamen des aktuellen Arbeitsverzeichnisses (inklusive des Laufwerks) als String an der durch buf bezeichneten Adresse. Die Maximallänge des Pfadnamens wird durch den Parameter buflen begrenzt. Ist der vollständige Pfadname einschließlich des abschließenden Nullzeichens länger als buflen Bytes, so wird ein Fehler erzeugt.

Wenn der als buf übergebene Zeiger den Wert NULL hat, reserviert getcwd über einen Aufruf von malloc selbständig einen Bereich von buflen Bytes. Später können Sie diesen reservierte Speicherbereich wieder freigegeben, indem Sie der Funktion free den Rückgabewert von getcwd übergeben.

Rückgabewert

getcwd liefert folgende Werte zurück:

Ist buf bei der Eingabe ungleich NULL, wird bei fehlerfreier Ausführung buf, im Fehlerfall NULL zurückgeliefert.

Ist buf bei der Eingabe gleich NULL, liefert getcwd bei fehlerfreier Ausführung einen Zeiger auf den reservierten Puffer zurück.

Im Fehlerfall wird errno auf einen der folgenden Werte gesetzt:

ENODEV	Gerät nicht bereit/nicht vorhanden

ENOMEM	Nicht genug Platz im Hauptspeicher (buf gleich NULL)

ERANGE	Verzeichnisname länger als buflen (buf ungleich NULL)


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


getdate, setdate

Siehe auch	Beispiele	Portabilität

Syntax

#include <dos.h>

void getdate(struct date *datep);

void setdate(struct date *datep);

Beschreibung

Übergibt und setzt das Systemdatum.

getdate füllt die date-Struktur (auf dem mit datep gezeigt) mit dem aktuellen Systemdatum auf.

setdate setzt das Systemdatum (Monat, Tag und Jahr) auf das in der date-Struktur enthaltenen Datum, auf das mit  datep gezeigt wird. Beachten Sie, daß eine Anforderung das Datum zu setztn, fehlschalgen kann, wenn Sie nicht über die dazu erforderlichen Rechte verfügen.

Die date-Struktur wird folgendermaßen definiert:

struct date{

   int da_year;     /* Aktuelles Jahr */

   char da_day;     /* Monatstag */

   char da_mon;     /* Monat (1 = Jan) */

};

Rückgabewert

getdate und setdate liefern keinen Rückgabewert.


Siehe auch

ctime

gettime

settime


Beispiele

getdate

setdate


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+ 	 	 	+


_getdcwd, _wgetdcwd

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

char *getcwd(char *buf, int buflen);

wchar_t *_wgetcwd(wchar_t *buf, int buflen);

Beschreibung

Liefert das aktuelle Arbeitsverzeichnis des angegebenen Laufwerks.

_getdcwd liefert den vollständigen Pfadnamen des Arbeitsverzeichnisses im angegebenen Laufwerk (einschließlich des Laufwerknamens) als String in buffer zurück, dessen Maximallänge durch den Parameter buflen gesetzt wird. Ist der vollständige Pfadname einschließlich des abschließenden Nullzeichens länger als buflen Bytes, so wird ein Fehler erzeugt. Für den Parameter drive gilt: 0 = aktuelles Laufwerk, 1 = A, 2 = B, etc.

Wenn das Arbeitsverzeichnis das Stammverzeichnis ist, ist das den ganzen Pfad abschließende Zeichen ein Backslash. Wenn das Arbeitsverzeichnis ein Unterverzeichnis ist, gibt eine keinen abschließenden Backslash nach dem Namen des Unterverzeichnisses.

Wenn der als buffer übergebene Zeiger den Wert NULL hat, reserviert _getdcwd einen Puffer von mindestens buflen Bytes. Später kann dieser Speicherbereich durch Übergabe des Rückgabewerts von _getdcwd an die Funktion free wieder freigegeben werden.

Rückgabewert

_getdcwd liefert bei fehlerfreier Ausführung einen Zeiger auf den Puffer zurück, der den Namen des aktuellen Verzeichnisses im angegebenen Laufwerk enthält.

Im Fehlerfall liefert _getdcwd den Wert NULL, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

ENOMEM	Nicht genug Platz im Hauptspeicher (buffer ist NULL)

ERANGE	Verzeichnisname ist länger als buflen (buffer ist ungleich NULL)


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


getdfree

Siehe auch	Beispiel	Portabilität

Syntax

#include <dos.h>

void getdfree(unsigned char drive, struct dfree *dtable);

Beschreibung

Ermittelt den freien Platz auf einer Diskette/Festplatte.

getdfree ermittelt Informationen über das durch den Parameter drive angegebene Laufwerk und speichert sie in einer Struktur des Typs dfree, auf den durch die Laufwerksattribute von dtable gezeigt wird. Wenn drive den Wert 0 hat, wird das aktuelle Laufwerk bearbeitet, ansonsten gilt A = 1, B = 2 usw.

Der Strukturtyp dfree ist folgendermaßen definiert:

struct dfree {

   unsigned df_avail;  /* freie Cluster */

   unsigned df_total;  /* Gesamtzahl Cluster */

   unsigned df_bsec;   /* Bytes pro Sektor */

   unsigned df_sclus;  /* Sektoren pro Cluster */

};

Rückgabewert

getdfree liefert keinen Wert zurück. Im Fehlerfall wird das Element df_sclus auf (unsigned) -1 gesetzt.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


getdisk, setdisk

Siehe auch	Beispiele	Portabilität

Syntax

#include <dir.h>

int getdisk(void);

int setdisk(int drive);

Beschreibung

Ermittelt oder setzt die aktuelle Laufwerksnummer.

getdisk liefert die Nummer des aktuellen Laufwerks als Integer zurück: 0 entspricht Laufwerk A, 1 entspricht Laufwerk B usw.

setdisk setzt das aktuelle Laufwerk auf die Nummer in drive: 0 entspricht Laufwerk A, 1 entspricht Laufwerk B usw.

Die Funktion setdisk ändert das aktuelle Laufwerk des übergeordneten Prozesses.

Rückgabewert

getdisk liefert die aktuelle Laufwerksnummer zurück. setdisk liefert die Anzahl der verfügbaren Laufwerke zurück.


Beispiele

getdisk

setdisk


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


getenv, _wgetenv

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *getenv(const char *name);

wchar_t *_wgetenv(const wchar_t *name);

Beschreibung

Sucht oder löscht eine Umgebungsvariable aus der Betriebssystemumgebung. getenv liefert den Wert der durch den Parameter name angegebenen Umgebungsvariable zurück. Unter DOS und OS/2 muß name in Großbuchstaben vorliegen, in anderen Systemen kann er entweder in Groß- oder Kleinbuchstaben geschrieben sein. name darf das Gleichheitszeichen (=) nicht enthalten. Existiert die angegebene Umgebungsvariable nicht, so liefert getenv einen NULL-Zeiger zurück.

Über den Aufruf getenv("name=") kann eine Umgebungsvariable gelöscht werden.

Hinweis:	Umgebungsvariablen dürfen nicht direkt geändert werden. Wenn ein bestimmter Wert geändert werden soll, muß putenv verwendet werden.

Rückgabewert

Bei fehlerfreier Ausführung liefert getenv den Wert zurück, der der Variablen zugeordnet ist.

Falls die angegebene Variable name nicht existiert, so liefert getenv einen NULL-Zeiger zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


getftime, setftime

Siehe auch	Beispiele	Portabilität

Syntax

#include <io.h>

int getftime(int handle, struct ftime *ftimep);

int setftime(int handle, struct ftime *ftimep);

Beschreibung

Liest und setzt Datum und Uhrzeit einer Datei.

getftime ermittelt Datum und Uhrzeit der durch handle bezeichneten geöffnete Datei und speichert die entsprechenden Werte in der durch ftimep angegebenen ftime-Struktur.

setftime setzt Datum und Uhrzeit der durch handle bezeichneten geöffneten Datei auf die Werte der ftime-Struktur, auf die ftimep zeigt. Nach dem Aufruf von setftime darf nicht in die Datei geschrieben werden, da die geänderten Daten ansonsten verloren gehen.

Die Datei muß für Schreibzugriffe geöffnet worden sein, da ansonsten der Fehler EACCES auftritt.

Der Strukturtyp ftime ist folgendermaßen definiert:

struct ftime {

   unsigned ft_tsec: 5;     /* Zwei Sekunden */

   unsigned ft_min: 6;      /* Minuten */

   unsigned ft_hour: 5;     /* Stunden */

   unsigned ft_day: 5;      /* Tage */

   unsigned ft_month: 4;    /* Monate */

   unsigned ft_year: 7;     /* Jahr - 1980 */

 };

Rückgabewert

getftime und setftime liefern bei fehlerfreier Ausführung den Wert 0.

Im Fehlerfall wird der Wert -1 zurückgeliefert und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht erlaubt

EBADF	Ungültiges Handle

EINVFNC	Ungültige Funktionsnummer


Beispiele

getftime

setftime


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_get_osfhandle

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

long _get_osfhandle(int filehandle);

Beschreibung

Verbindet Datei-Handles.

_get_osfhandle verbindet ein Datei-Handle des Betriebssystems mit einem existierenden Laufzeit-Datei-Handle. Der Parameter filehandle ist ein Datei-Handle Ihres Programms.

Rückgabewert

Bei erfolgreicher Ausführung liefert _get_osfhandle ein Datei-Handle des Betriebssystems zurück, das filehandle entspricht.

Andernfalls wird der Wert -1 zurückgeliefert und errno wird auf

EBADF (ungültiges Handle) gesetzt


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+


getpass

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

char *getpass(const char *prompt);

Beschreibung

Liest ein Kennwort.

getpass gibt den durch prompt bezeichneten nullterminierten String aus und erwartet die Eingabe eines Kennworts über die Tastatur. Die vom Benutzer eingegebenen Zeichen werden nicht auf dem Bildschirm dargestellt. Der String hat eine Maximallänge von acht Zeichen (wobei das abschließende Nullzeichen nicht mitgezählt wird).

Hinweis:	Diese Funktion sollte in Win32 oder Win32 GUI-Anwendungen nicht verwendet werden.

Rückgabewert

getpass liefert einen Zeiger auf einen statischen String zurück, der durch jeden erneuten Aufruf


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 +	 	+	 	 	+


getpid

Siehe auch	Beispiel	Portabilität

Syntax

#include <process.h>

unsigned getpid(void)

Beschreibung

Liefert die Prozeß-ID eines Programms.

Diese Funktion liefert die aktuelle Prozeß-ID zurück. Die Prozeß-ID ist ein Integerwert, der einen Prozeß eindeutig kennzeichnet.

Rückgabewert

getpid liefert die Prozeß-ID des aktuellen Prozesses zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


gets, _getws

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

char *gets(char *s);

wchar_t *_getws(wchar_t *s);  // Unicode-Version

Beschreibung

Liest einen String aus stdin.

gets liest einen String aus dem Standardeingabe-Stream stdin und speichert sie in der durch s angegebenen Stringvariablen. Die Eingabe wird durch einen Zeilenvorschub beendet, der in s als Nullzeichen (\0) gespeichert wird.

Eingabestrings dürfen bestimmte Whitespace-Zeichen (Leerzeichen, Tabs) enthalten. gets kehrt zurück, wenn ein Zeilenvorschub gelesen wird; der String bis zu diesem Zeilenvorschub wird in s gespeichert.

Die Funktion gets kennt keine Längenbeschränkung, d.h., bei genügend großem Eingabe-String können Daten überschrieben und damit zerstört werden. Mit fgets läßt sich der Umgang mit den Eingabe-Strings besser kontrollieren.

Hinweis:	In Win32 oder Win32 GUI-Anwendungen muß stdin umgelenkt werden.

Rückgabewert

gets liefert bei fehlerfreier Ausführung die Stringvariable s zurück.

Im Fehlerfall oder wenn beim Lesen das Dateiende überschritten wird, ist der Rückgabewert NULL.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	+	+	+


gettext

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int gettext(int left, int top, int right, int bottom, void *destin);

Beschreibung

Kopiert Text vom Textbildschirm in den Speicher.

gettext speichert den Inhalt eines rechteckigen Textbildschirmausschnitts in dem Speicherbereich, auf den destin zeigt. Die linke obere Ecke des Ausschnitts ist durch left und top (links, oben), die rechte untere Ecke durch right und bottom (unten, rechts) festgelegt.

Die Funktion arbeitet unabhängig von einem eventuell definierten Textfenster mit absoluten Bildschirmkoordinaten, wobei die obere linke Koordinatenecke mit (1,1) angesprochen wird. Der Inhalt des Rechtecks wird von gettext sequentiell von links nach rechts und von oben nach unten in den Speicher eingelesen.

Jede Bildschirmposition benötigt zwei Bytes Speicherplatz: Das erste Byte ist das Zeichen selbst, das zweite das Video-Attribut an der jeweiligen Position. Der benötigte Speicherplatz für ein Rechteck mit w Spalten und h Zeilen ergibt sich aus:

Bytes = (h Zeilen) * (w Spalten) * 2

Hinweis:	Diese Funktion sollte in Win32 oder Win32 GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Bei fehlerfreier Ausführung liefert gettext den Wert 1.

Im Fehlerfall liefert gettext 0 zurück (wenn Sie z.B. Koordinaten angegeben haben, die im aktuellen Bildschirmmodus nicht gültig sind).


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


gettextinfo

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void gettextinfo(struct text_info *r);

Beschreibung

Ermittelt Informationen über den aktuellen Textmodus.

gettextinfo füllt die Elemente der mit r übergebenen Struktur des Typs text_info mit den aktuellen Parametern für Textausgaben.

Der Strukturtyp text_info ist in conio.h folgendermaßen definiert:

struct text_info {

   unsigned char winleft;      /* linke Fensterkoordinate */

   unsigned char wintop;       /* obere Fensterkoordinate */

   unsigned char winright;     /* rechte Fensterkoordinate */

   unsigned char winbottom;    /* untere Fensterkoordinate */

   unsigned char attribute;    /* Textattribut */

   unsigned char normattr;     /* normales Attribut */

   unsigned char currmode;     /* BW40, BW80, C40, C80 oder C4350 */

   unsigned char screenheight; /* Höhe des Textfensters */

   unsigned char screenwidth;  /* Breite des Textfensters */

   unsigned char curx,         /* Cursorposition im */

   unsigned char cury;         /* aktuellen Fenster */

};

Hinweis:	Diese Funktion sollte in Win32 oder Win32 GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Keiner. Die Ergebnisse werden in der Struktur, auf die r zeigt, zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


gettime, settime

Siehe auch	Beispiele	Portabilität

Syntax

#include <dos.h>

void gettime(struct time *timep);

void settime(struct time *timep);

Beschreibung

Lesen und Setzen der Systemzeit.

gettime liefert in der über timep angegebenen Struktur des Typs time die aktuelle Uhrzeit des Systems zurück.

settime setzt die Uhrzeit des Systems auf die Werte, die in der über timep angegebenen Struktur des Typs time enthalten sind.

Der Strukturtyp time ist in dos.h folgendermaßen definiert:

struct time {

   unsigned char ti_min;     /* Minuten */

   unsigned char ti_hour;    /* Stunden */

   unsigned char ti_hund;    /* 1/100 Sekunden */

   unsigned char ti_sec;     /* Sekunden */

};

Rückgabewert

Keiner


Beispiele

gettime

settime


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
gettime	+		+	+			+
settime	+		+				+


_getw

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _getw(FILE *stream);

Beschreibung

Liest einen Integerwert aus einem Stream.

_getw liest den nächsten Integer aus dem durch stream bezeichneten Eingabe-Stream. Eine spezielle Anordnung des Dateiinhalts wird nicht vorausgesetzt.

_getw sollte nicht benutzt werden, wenn der Stream im Textmodus geöffnet wurde.

Rückgabewert

_getw liefert die nächste Zahl vom Typ integer auf dem Eingabe-Stream zurück.

Bei Überschreitung des Dateiendes oder einem Fehler ist der Rückgabewert EOF.

Hinweis:	Da EOF aber auch einen gültigen Wert darstellen kann, sollte ein expliziter Test mit feof oder ferror folgen, um auf Dateiende oder Fehler zu prüfen.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


gmtime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

struct tm *gmtime(const time_t *timer);

Beschreibung

Rechnet Datum und Uhrzeit in die Greenwich Mean Time (GMT) um.

gmtime erwartet die Adresse eines Wertes, der von time zurückgeliefert wird, und liefert einen Zeiger auf eine Struktur vom Typ tm, in der die einzelnen Komponenten der Uhrzeit gespeichert sind. gmtime wandelt direkt in GMT um.

Die globale long-Variable _timezone sollte den Unterschied zwischen der lokalen Zeit und der GMT in Sekunden enthalten (für MEZ ist _timezone = -1 * 60 * 60). Die globale Variable _daylight darf nur dann auf einen Wert ungleich null gesetzt werden, wenn die Standardkonvertierung der USA für Sommer- und Winterzeit angewendet werden soll.

Der Strukturtyp tm ist in time.h folgendermaßen definiert:

struct tm {

   int tm_sec;    /* Sekunden */

   int tm_min;    /* Minuten */

   int tm_hour;   /* Stunde (0 bis 23) */

   int tm_mday;   /* Tag im Monat (1 bis 31) */

   int tm_mon;    /* Monat (0 bis 11) */

   int tm_year;   /* Jahr (Kalenderjahr minus 1900) */

   int tm_wday;   /* Wochentag (0 bis 6, Sonntag = 0) */

   int tm_yday;   /* Tag im Jahr (0 bis 365) */

   int tm_isdst;  /* Ungleich null bei US-Sommerzeitkonvertierung */

};

Die Tageszeit wird in 24 Stunden gemessen, der Tag im Monat von 1 bis 31, der Monat von 0 bis 11 und der Tag im Jahr von 0 bis 365. Der Wochentag beginnt mit Sonntag = 0, und zur Jahresangabe muß 1900 addiert werden. Das Flag tm_isdst gibt an, ob die Sommerzeitkonvertierung durchgeführt wurde.

Rückgabewert

gmtime liefert einen Zeiger auf eine statische Struktur mit der ermittelten Information zurück, die durch jeden Aufruf dieser Funktion überschrieben wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+  	+	+


gotoxy

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void gotoxy(int x, int y);

Beschreibung

gotoxy positioniert den Cursor auf die angegebene Position im aktuellen Textfenster. Wenn die Koordinaten in irgendeiner Weise ungültig sind, wird der Aufruf von gotoxy vollständig ignoriert. Dies ist z.B. dann der Fall, wenn gotoxy(40,30) angegeben wird, die Koordinaten der rechten unteren Fensterecke aber bei (35,25) liegen.

Keines der beiden Argumente von gotoxy darf gleich 0 sein.

Hinweis:	Diese Funktion sollte in GUI-Anwendungen unter Win32 oder Win32 nicht verwendet werden.

Rückgabewert

Keiner.


Beispiele

gotoxygotoxy_Ex


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


heapcheck

Beispiel	Portabilität

Syntax

#include <alloc.h>

int heapcheck(void);

Beschreibung

Überprüft den Heap.

heapcheck überprüft jeden Heap-Block auf seine Zeiger, Größe und weitere wichtige Attribute.

Rückgabewert

Bei fehlerfreier Ausführung wird ein Wert größer als 0, im Fall eines Fehlers ein Wert kleiner als 0 zurückgeliefert. Im einzelnen können von der Funktion folgende Werte zurückgeliefert werden:

_HEAPCORRUPT	Der Heap ist ungültig

_HEAPEMPTY	Es gibt keinen Heap

_HEAPOK	Kein Fehler gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


heapcheckfree

Beispiel	Portabilität

Syntax

#include <alloc.h>

int heapcheckfree(unsigned int fillvalue);

Beschreibung

heapcheckfree überprüft die freien Blöcke des Heap auf einen konstanten Wert.

Rückgabewert

Bei erfolgreicher Ausführung ist der Rückgabewert größer als 0, im Fall eines Fehlers kleiner als 0. Im einzelnen können von der Funktion folgende Werte zurückgeliefert werden:

_BADVALUE	Ein anderer Wert wurde gefunden

_HEAPCORRUPT	Der Heap ist ungültig

_HEAPEMPTY	Es gibt keinen Heap

_HEAPOK	Kein Fehler gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


heapchecknode

Beispiel	Portabilität

Syntax

#include <alloc.h>

int heapchecknode(void *node);

Beschreibung

Überprüft einen einzelnen Knoten des Heap.

Wird heapchecknode nach der Freigabe eines Knotens mit einem Zeiger auf diesen Block aufgerufen, kann _BADNODE anstelle des erwarteten _FREEENTRY zurückgeliefert werden. Der Grund liegt darin, daß benachbarte freie Blöcke auf dem Heap zusammengefaßt werden und der betreffende Block deshalb nicht mehr existiert.

Rückgabewert

Folgende Werte können zurückgeliefert werden:

_BADNODE	Der Knoten wurde nicht gefunden

_FREEENTRY	Der Knoten ist ein freier Block

_HEAPCORRUPT	Der Heap ist ungültig

_HEAPEMPTY	Es gibt keinen Heap

_USEDENTRY	Der Knoten ist ein reservierter Block


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_heapchk

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

int _heapchk(void);

Beschreibung

Überprüft den Heap.

Die Funktion _heapchk durchläuft den Heap, untersucht jeden Block und überprüft seine Zeiger, seine Größe und weitere wichtige Attribute.

Rückgabewert

Einer der folgenden Werte wird zurückgeliefert:

_HEAPBADNODE	Ein fehlerhafter Block wurde gefunden

_HEAPEMPTY	Es gibt keinen Heap

_HEAPOK	Der Heap scheint fehlerfrei zu sein


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


heapfillfree

Beispiel	Portabilität

Syntax

#include <alloc.h>

int heapfillfree(unsigned int fillvalue);

Beschreibung

Füllt die freien Blöcke des Heap mit einem konstanten Wert.

Rückgabewert

Die Funktion _heapfillfree liefert einen der folgenden Werte zurück:

_HEAPCORRUPT	Der Heap ist fehlerhaft.

_HEAPEMPTY	Es gibt keinen Heap.

_HEAPOK	Der Heap scheint fehlerfrei zu sein.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_heapmin

Siehe auch	Portabilität

Syntax

#include <malloc.h>

int _heapmin(void);

Beschreibung

Gibt unbenutzte Heap-Bereiche wieder frei.

Die Funktion _heapmin gibt unbenutzte Heap-Bereiche wieder für das Betriebssystem frei. Dadurch können reservierte und danach wieder freigegebene Speicherblöcke von anderen Prozessen genutzt werden. Es ist kein Fehler, wenn wegen der Fragmentierung des Heap nicht immer alle unbenutzten Speicherblöcke an das Betriebssystem zurückgegeben werden können.

Rückgabewert

_heapmin liefert bei erfolgreicher Ausführung 0, im Fehlerfall -1 zurück


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_heapset

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

int _heapset(unsigned int fillvalue);

Beschreibung

Füllt die freien Blöcke des Heap mit einem konstanten Wert.

_heapset überprüft den Zustand des Heap und verwendet dabei dieselben Methoden wie die Funktion _heapchk. . Danach werden alle freien Blöcke des Heap mit dem Inhalt des niederwertigen Byte von fillvalue gefüllt. Die Funktion kann bei der Lösung von Problemen hilfreich sein, deren Ursache mit dem Heap zu tun hat. Sie garantiert jedoch nicht, daß später reservierte Speicherblöcke mit dem angegebenen Wert gefüllt sind.

Rückgabewert

Einer der folgenden Werte wird zurückgeliefert:

_HEAPOK	Kein Fehler gefunden

_HEAPEMPTY	Es gibt keinen Heap

_HEAPBADNODE	Ein fehlerhafter Block wurde gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


heapwalk

Beispiel	Portabilität

Syntax

#include <alloc.h>

int heapwalk(struct heapinfo *hi);

Beschreibung

Durchläuft den Heap Knoten für Knoten.

heapwalk geht davon aus, daß der Heap gültig ist (überprüfen Sie dies vorher mit heapcheck). Mit dem letzten Block wird _HEAPOK zurückgeliefert. Bei einem erneuten Aufruf von heapwalk ist das Ergebnis _HEAPEND.

Die Funktion heapwalk übernimmt einen Zeiger auf eine Struktur vom Typ heapinfo (deklariert in alloc.h). Setzen Sie das Feld hi.ptr beim ersten Aufruf der Funktion auf NULL. Nach der Rückkehr enthält hi.ptr die Adresse des ersten Blocks, während hi.size die Größe des Blocks in Bytes angibt. Wird der Block zur Zeit benutzt, ist das Flag hi.in_use gesetzt.

Rückgabewert

Einer der folgenden Werte wird zurückgeliefert:

_HEAPEMPTY	Es gibt keinen Heap

_HEAPEND	Das Ende des Heap wurde erreicht

_HEAPOK	Der heapinfo-Block enthält gültige Daten über den nächsten Heap-Block


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


highvideo

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void highvideo(void);

Beschreibung

Setzt hohe Intensität für nachfolgende Textausgaben.

highvideo setzt das Bit für "hohe Intensität" der aktuellen Vordergrundfarbe und schaltet damit die hohe Intensität für nachfolgende Textausgaben ein.

Bereits ausgegebene Zeichen bleiben unverändert - die Funktion highvideo beeinflußt nur Zeichen, die mit Funktionen zur direkten Bildschirmausgabe von Text (wie z.B. cprintf) dargestellt werden, nachdem die Funktion highvideo aufgerufen wurde.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


hypot, hypotl

Beispiel	Portabilität

Syntax

#include <math.h>

double hypot(double x, double y);

long double hypotl(long double x, long double y);

Beschreibung

Berechnet die Hypotenuse eines rechtwinkligen Dreiecks.

hypot berechnet den Wert z, wobei gilt:

z2 = x2 + y2 und z >= 0.

Dies entspricht der Länge der Hypotenuse eines rechtwinkligen Dreiecks, dessen Kathete und Ankathete die Längen x bzw. y haben.

hypotl ist die long double Version. Sie erwartet Argumente vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

Bei fehlerfreier Ausführung wird z als double (hypot) bzw. long double (hypotl) zurückgeliefert. Im Falle eines Fehlers (zum Beispiel bei einem Überlauf) liefert hypot HUGE_VAL und hypotl _LHUGE_VAL zurück, und die globale Variable errno wird auf folgenden Wert gesetzt:

ERANGE	Ergebnis außerhalb des gültigen Bereichs

Die Fehlerbehandlung für hypot und hypotl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
hypot	+	+	+	+			+
hypotl	+		+	+			+


inpw

Beispiel	Portabilität

Syntax

#include <conio.h>

unsigned inpw(unsigned portid);

Beschreibung

Liest ein Wort aus einer Schnittstelle.

Das Makro inpw liest ein 16-Bit-Wort von der durch portid angegebenen Schnittstelle. inpw liest das niederwertige Byte des Wortes von portid und das höherwertige von portid +1.

inpw ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe, wenn conio.h nicht aufgenommen wird oder ein entsprechendes #undef stattgefunden hat.

Rückgabewert

inpw liefert den gelesenen Wert zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+


insline

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void insline(void);

Beschreibung

Fügt eine Leerzeile in der aktuellen Hintergrundfarbe an der Cursor-Position in das Textfenster ein.

insline verschiebt alle Zeilen zwischen der aktuellen Cursor-Position und dem Ende des Textfensters um eine Zeile nach unten; die unterste Zeile wird dabei aus dem Fenster geschoben.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden. insline arbeitet nur im Textmodus.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


isalnum, iswalnum, _ismbcalnum

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isalnum(int c);

int iswalnum(wint_t c);

#include <mbstring.h>

int _ismbcalnum(unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein alphanumerisches Zeichen ist.

Das Makro isalnum prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. isalnum ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Buchstabe (A bis z oder a bis z) oder eine Ziffer (0 bis 9).

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

Es wird ein Wert ungleich Null für true und 0 für false zurückgeliefert. isalnum liefert einen Wert ungleich Null zurück, wenn c ein Buchstabe oder eine Ziffer ist.

iswalnum liefert einen Wert ungleich Null zurück, wenn iswalpha oder iswdigit true für c liefern.

_ismbcalnum liefert nur dann true zurück, wenn c ein englisches ASCII-Einzelbyte-Zeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isalpha, iswalpha, _ismbcalpha

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isalpha(int c);

int iswalpha(wint_t c);

#include <mbstring.h>

int _ismbcalpha(unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein Buchstabe ist.

isalpha prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Buchstabe (A bis Z oder a bis z).

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isalpha liefert einen Wert ungleich Null zurück, wenn c ein Buchstabe ist.

iswalpha liefert einen Wert ungleich Null zurück, wenn c ein Wert des Typs wchar_t aus dem durch die Implementation definierten Zeichensatz ist.

_ismbcalpha liefert nur dann true zurück, wenn c ein englisches ASCII-Einzelbyte-Zeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isascii, iswascii

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isascii(int c);

int iswascii(wint_t c);

Beschreibung

Makro zur Klassifizierung von Zeichen.

Diese Funktionen sind von LC_CTYPE abhängig.

isascii prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro liefert einen Wert ungleich Null für true und den Wert 0 für false zurück.

isascii ist für alle Integerwerte definiert.

Rückgabewert

isascii liefert einen Wert ungleich Null zurück, wenn c im Bereich von 0 bis 127 (0x00-0x7F) liegt.

isascii liefert einen Wert ungleich Null zurück, wenn c


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


isatty

Beispiel	Portabilität

Syntax

#include <io.h>

int isatty(int handle);

Beschreibung

Prüft den Gerätetyp.

isatty prüft, ob das über handle angegebene Peripheriegerät zu einem der folgende Gerätetypen gehört:

Terminal

Tastatur

Drucker

serielle Schnittstelle

Rückgabewert

Wenn das Gerät eines der oben aufgeführten Geräte ist, liefert isatty einen Wert ungleich Null. Andernfalls wird 0 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


iscntrl, iswcntrl

Beispiel	Portabilität

Syntax

#include <ctype.h>

int iscntrl(int c);

int iswcntrl(wint_t c);

Beschreibung

Testet, ob ein Zeichen ein Steuerzeichen ist.

Das Makro iscntrl prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Löschzeichen oder ein Steuerzeichen (0x7F oder 0x00 bis 0x1f).

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

iscntrl liefert einen Wert ungleich Null zurück, wenn c ein Löschzeichen oder ein Steuerzeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isdigit, iswdigit, _ismbcdigit

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isdigit(int c);

int iswdigit(wint_t c);

#include <mbstring.h>

int _ismbcdigit(unsigned int c);

Beschreibung

Testet, ob ein Zeichen eine Dezimalziffer ist.

Das Makro isdigit prüft das übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c eine Ziffer (0 bis 9).

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isdigit liefert einen Wert ungleich Null zurück, wenn c eine Ziffer ist.

_ismbcdigit liefert nur dann true zurück, wenn das Argument c eine Einzelbyte-Darstellung einer ASCII-Ziffer ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isgraph, iswgraph, _ismbcgraph

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isgraph(int c);

int iswgraph(wint_t c);

#include <mbstring.h>

int _ismbcgraph( unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein druckbares Zeichen ist.

Das Makro isgraph prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein druckbares Zeichen mit Ausnahme des Leerzeichens (' ').

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isgraph liefert einen Wert ungleich Null zurück, wenn c ein druckbares Zeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


islower, iswlower, _ismbclower

Beispiel	Portabilität

Syntax

#include <ctype.h>

int islower(int c);

int iswlower(wint_t c);

#include <mbstring.h>

int _ismbclower(unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein Kleinbuchstabe ist.

Das Makro islower prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Kleinbuchstabe (a bis z).

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

islower liefert einen Wert ungleich Null zurück, wenn c ein Kleinbuchstabe ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_ismbblead, _ismbbtrail

Syntax

#include <mbstring.h>

int _ismbblead(unsigned int c);

int _ismbbtrail(unsigned int c);

Beschreibung

Mit _ismbblead und _ismbbtrail kann getestet werden, ob das Argument c das erste oder das zweite Byte eines Multibyte-Zeichens ist.

_ismbblead and _ismbbtrail sind von der benutzen Zeichensatztabelle abhängig. Sie können die Zeichensatztabelle mit der Funktion _setlocale festlegen.

Rückgabewert

_ismbblead gibt true zurück, wenn c im ersten Byte eines Multibyte-Zeichens liegt.

_ismbbtrail liefert einen Wert ungleich Null, wenn c im zweiten Byte eines Multibyte-Zeichens liegt.


_ismbclegal

Syntax

#include <mbstring.h>

int _ismbclegal(unsigned int c);

Beschreibung

_ismbclegal prüft, ob jedes Byte des Arguments c in der momentan benutzten Zeichensatztabelle enthalten ist.

Rückgabewert

_ismbclegal gibt einen Wert ungleich Null zurück, wenn das Argument c ein gültiges Multibyte-Zeichen aus der momentan benutzten Zeichensatztabelle ist. Andernfalls liefert die Funktion den Wert 0.


_ismbslead, _ismbstrail

Siehe auch

Syntax

#include <mbstring.h>

int _ismbslead(const unsigned char *s1, const unsigned char *s2);

int _ismbstrail(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Die Funktionen _ismbslead und _ismbstrail prüfen im Argument s1, ob das Argument s2 ein Zeiger auf das führende oder folgende Byte ist.

Rückgabewert

Die Funktionen _ismbslead und _ismbstrail liefern den Wert -1, wenn s2 entweder auf das erste oder das zweite Byte zeigt. Andernfalls wird der Wert 0 zurückgegeben.


isprint, iswprint, _ismbcprint

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isprint(int c);

int iswprint(wint_t c);

#include <mbstring.h>

int _ismbcprint(unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein druckbares Zeichen ist.

Das Makro isprint prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein druckbares Zeichen einschließlich des Leerzeichens (' ').

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isprint liefert einen Wert ungleich Null zurück, wenn c ein druckbares Zeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


ispunct, iswpunct, _ismbcpunct

Beispiel	Portabilität

Syntax

#include <ctype.h>

int ispunct(int c);

int iswpunct(wint_t c);

#include <mbstring.h>

int _ismbcpunct(unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein Interpunktionszeichen ist.

Das Makro ispunct prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c jedes druckbare Zeichen, das weder ein alphanumerisches Zeichen noch ein Leerzeichen (' ') ist.

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

ispunct liefert einen Wert ungleich Null zurück, wenn c ein Interpunktionszeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isspace, iswspace, _ismbcspace

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isspace(int c);

int iswspace(wint_t c);

#include <mbstring.h>

int _ismbcspace(unsigned int c);

Beschreibung

Testet, ob ein Zeichen ein Leerzeichen ist.

Das Makro isspace prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig.

Sie können das Makro durch eine entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isspace liefert einen Wert ungleich Null zurück, wenn c ein Leerzeichen, Tabulator, Wagenrücklauf, Zeilenvorschub, vertikaler Tabulator oder ein Seitenvorschub (ASCII-Codes 0x09 bis 0x0D, 0x20) oder jedes andere in der Locale-Kategorie definierte Leerzeichen ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isupper, iswupper, _ismbcupper

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isupper(int c);

int iswupper(wint_t c);

#include <mbstring.h>

int _ismbcupper(unsigned int c);

Beschreibung

 Testet, ob ein Zeichen ein Großbuchstabe ist.

Das Makro isupper prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Großbuchstabe (A bis Z).

Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isupper liefert einen Wert ungleich Null zurück, wenn c ein Großbuchstabe ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


isxdigit, iswxdigit

Beispiel	Portabilität

Syntax

#include <ctype.h>

int isxdigit(int c);

int iswxdigit(wint_t c);

Beschreibung

Testet, ob ein Zeichen eine hexadezimale Ziffer ist.

Das Makro isxdigit prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig.

Sie können das Makro durch eine entsprechendes #undef als Funktion verfügbar machen.

Rückgabewert

isxdigit liefert einen Wert ungleich Null zurück, wenn c eine hexadezimale Ziffer (0 bis 9, A bis F, a bis f) oder jede andere durch die Locale-Kategorie definierte hexadezimale Ziffer ist.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


itoa, _itow

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *itoa(int value, char *string, int radix);

wchar_t *_itow(int value, wchar_t *string, int radix);

Beschreibung

Konvertiert einen Integerwert in einen String.

itoa konvertiert den übergebenen Integerwert value in einen nullterminierten String und speichert das Ergebnis in der durch string bezeichneten Variablen.

Der Parameter radix legt die Basis fest, die bei der Konvertierung benutzt werden soll. Mögliche Werte liegen im Bereich von 2 bis 36. Wenn radix den Wert 10 hat und value kleiner als Null ist, stellt itoa dem Ergebnis ein Minuszeichen voran.

Hinweis:	Der für string reservierte Speicherplatz muß groß genug sein, um das Ergebnis der Konvertierung inklusive eines abschließenden NULL-Zeichens (\0) aufnehmen zu können. itoa kann maximal 17 Bytes liefern

Rückgabewert

itoa liefert den Zeiger auf string zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


kbhit

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int kbhit(void);

Beschreibung

Prüft auf verfügbare Tastenanschläge.

kbhit prüft, ob ein Zeichen über die Tastatur eingegeben wurde. Verfügbare Zeichen können mit getch oder getche gelesen werden

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Wenn eine noch nicht gelesene Tastatureingabe vorliegt, liefert kbhit einen Wert ungleich Null. Andernfalls liefert kbhit den Wert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


labs

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

long labs(long int x);

Beschreibung

Liefert den absoluten Wert eines long-Wertes.

labs berechnet den absoluten Wert des Arguments x.

Rückgabewert

labs gibt den absoluten Wert des Arguments x zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+  	+	+


ldexp, ldexpl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double ldexp(double x, int exp);

long double ldexpl(long double x, int exp);

Beschreibung

Berechnet [image].

ldexpl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

Bei fehlerfreier Ausführung geben ldexp und ldexpl das Ergebnis der Berechnung von [image] zurück. Die Fehlerbehandlung kann für diese Funktionen über die Routine _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
ldexp	+	+	+	+	+	+	+
ldexpl	+		+	+			+


ldiv

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

ldiv_t ldiv(long int numer, long int denom);

Beschreibung

Dividiert zwei long-Werte und liefert den Quotienten und den Divisionsrest zurück.

ldiv dividiert die als numer (Dividend) und denom (Divisor) übergebenen long-Werte und liefert eine Struktur des Typs ldiv_t zurück. Dieser Datentyp ist in stdlib.h folgendermaßen definiert:

typedef struct {

   long int quot;      /* Quotient */

   long int rem;       /* Divisionsrest */

   } ldiv_t;

Rückgabewert

Es wird eine Struktur des zuvor beschriebenen Typs zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


lfind

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void  *lfind(const void *key, const void *base, size_t *num, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

Beschreibung

Führt eine lineare Suche nach einem Array-Element durch.

lfind durchsucht linear ein sequentiell angeordnetes Array nach dem Wert des Schlüsselfeldes key. lfind verwendet eine benutzerdefinierte Vergleichsroutine fcmp, die mit der _USERENTRY-Aufrufkonvention verwendet werden muß.

Der Parameter *num gibt die Anzahl der Array-Elemente an; width die Größe der Elemente in Bytes. Der Parameter base muß auf das erste Element zeigen.

Rückgabewert

lfind liefert die Adresse des ersten Array-Elements, das mit dem Suchschlüssel key identisch ist. Falls der gesuchte Eintrag nicht existiert, liefert lfind den Wert NULL. Die Vergleichsroutine muß für *elem1 == *elem2 (ihre beiden Parameter) den Wert 0 liefern, andernfalls einen Wert ungleich Null.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


localeconv

Siehe auch	Beispiel	Portabilität

Syntax

#include <locale.h>

struct lconv *localeconv(void);

Beschreibung

Ermittelt die Locale-Einstellung für numerische Formate.

localeconv liefert Informationen über länderspezifische numerische Formate (z.B. für die Währung). Diese Informationen sind in einer Struktur des Typs lconv gespeichert und können nur über die Funktion setlocale geändert werden. Nachfolgende Aufrufe von localeconv aktualisieren die Struktur lconv.

Der Strukturtyp lconv ist in locale.h definiert und enthält folgende Felder:

Feld	Anwendung

char *decimal_point;	Normaler Dezimalpunkt (ohne Währungsformate). Darf niemals ein leerer String sein.

char *thousands_sep;	Zeichen, um Ziffern links des Dezimalpunkts zu gruppieren. Wird nicht bei Währungsangaben verwendet.

char *grouping;	Größe jeder Zifferngruppe. Wird nicht bei Währungsangaben verwendet. Vgl. die folgende Wertetabelle.

char *int_curr_symbol;	Internationales Währungssymbol der aktuellen Locale-Einstellung. Das Symbolformat ist in der Norm ISO 4217 "Codes for Representation of Currency and Funds" festgelegt.

char *currency_symbol;	Lokales Währungssymbol der aktuellen Locale-Einstellung;

char *mon_decimal_point;	Dezimalpunkt für Währungsangaben.

char *mon_thousands_sep;	Zeichen, um bei Währungsangaben Ziffern links des Dezimalpunkts zu gruppieren.

char *mon_grouping;	Größe jeder Zifferngruppe bei Währungsangaben. Vgl. die folgende Wertetabelle.

char *positive_sign;	String, der nicht-negative Währungsangaben kennzeichnet.

char *negative_sign;	String, der negative Währungsangaben kennzeichnet.

char int_frac_digits;	Anzahl von Ziffern hinter dem Dezimalpunkt, die bei einer international formatierten Währungsangabe dargestellt werden.

char frac_digits;	Anzahl von Ziffern hinter dem Dezimalpunkt, die bei einer formatierten Währungsangabe dargestellt werden.

char p_cs_precedes;	Ist auf 1 gesetzt, wenn currency_symbol einer nicht-negativen, formatierten Währungsangabe vorangestellt wird. Wird currency_symbol nachgestellt, ist das Feld auf 0 gesetzt.

char p_sep_by_space;	Ist auf 1 gesetzt, wenn currency_symbol von einer nicht-negativen, formatierten Währungsangabe durch ein Leerzeichen getrennt wird. Andernfalls wird das Feld auf 0 gesetzt.

char n_cs_precedes;	Ist auf 1 gesetzt, wenn currency_symbol einer negativen, formatierten Währungsangabe vorangestellt wird. Wird currency_symbol nachgestellt, so ist das Feld auf 0 gesetzt.

char p_sep_by_space;	Ist auf 1 gesetzt, wenn currency_symbol von einer negativen, formatierten Währungsangabe durch ein Leerzeichen getrennt wird. Andernfalls wird das Feld auf 0 gesetzt.

char p_sign_posn;	Legt fest, wo das Pluszeichen für eine nichtnegative, formatierte Währungsangabe dargestellt werden soll.

char p_sign_posn;	Legt fest, wo das Zeichen negative_sign für eine negative, formatierte Währungsangabe dargestellt werden soll.

Alle obigen Strings mit Ausnahme von decimal_point werden in der aktuellen Locale-Einstellung nicht unterstützt, wenn sie leer sind. Die char-Feld, die keine Strings sind, enthalten nicht-negative Zahlenwerte. Ist ein char-Feld, das keinen String enthält, auf CHAR_MAX gesetzt, wird es in der aktuellen Locale-Einstellung nicht unterstützt.

Die Felder grouping und mon_grouping werden folgendermaßen gesetzt und interpretiert:

Wert	Bedeutung

CHAR_MAX	Es wird keine weitere Gruppierung durchgeführt.

0	Das vorherige Element soll für den Rest der Ziffern wiederholt verwendet werden.

jeder andere Integerwert	Legt die Größe der aktuellen Zifferngruppe fest. Um die Größe der folgenden Zifferngruppe zu bestimmen, wird das nächste Element eingelesen.

Die Felder p_sign_posn und n_sign_posn werden folgendermaßen gesetzt und interpretiert:

Wert	Bedeutung

0	Die Währungsangabe wird einschließlich des Währungssymbols currency_symbol eingeklammert.

1	Der Vorzeichenstring wird vor die Währungsangabe und currency_symbol gesetzt.

2	Der Vorzeichenstring wird hinter die Währungsangabe und currency_symbol gesetzt.

3	Der Vorzeichenstring wird direkt vor die Währungsangabe und currency_symbol gesetzt.

4	Der Vorzeichenstring wird direkt hinter die Währungsangabe und currency_symbol gesetzt.

Rückgabewert

localeconv liefert einen Zeiger auf die gefüllte Struktur des Typs lconv zurück. Die Strukturwerte werden bei jedem Aufruf von setlocale, der die Locale-Kategorien LC_MONETARY oder LC_NUMERIC ändert, aktualisiert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


localtime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

struct tm *localtime(const time_t *timer);

Beschreibung

Konvertiert Datum und Uhrzeit in eine Struktur des Typs tm.

localtime übernimmt die Adresse eines Wertes, der durch time geliefert wird, und gibt einen Zeiger auf die Struktur des Typs tm zurück, die die umgerechneten Zeitangaben enthält. localtime berücksichtigt hierbei Zeitzonen und die Sommerzeit.

Die globale long-Variable _timezone muß auf den Unterschied zwischen der lokalen Zeit und der Greenwich Mean Time (GMT) in Sekunden gesetzt werden (für MEZ ist _timezone -1*60*60). Die globale Variable daylight darf nur dann auf einen Wert ungleich Null gesetzt werden, wenn die Standardwerte der USA für Sommer- und Winterzeit angewendet werden können. Diese Werte werden von der Funktion tzset und nicht von einem Benutzerprogramm direkt gesetzt.

Der Strukturtyp tm ist in time.h folgendermaßen definiert:

struct tm {

   int tm_sec;     /* Sekunden */

   int tm_min;     /* Minuten */

   int tm_hour;    /* Stunden (0..23) */

   int tm_mday;    /* Tag im Monat (1..31) */

   int tm_mon;     /* Monat (0..11) */

   int tm_year;    /* Jahr (-1900) */

   int tm_wday;    /* Wochentag (0..6) */

   int tm_yday;    /* Tag im Jahr (0..365) */

   int tm_isdst;   /* Sommerzeit */

};

Die Tageszeit wird in 24 Stunden gemessen, der Tag im Monat von 1 bis 31, der Monat von 0 bis 11, und der Tag im Jahr von 0 bis 365. Der Wochentag beginnt mit Sonntag = 0; zur Jahresangabe muß 1900 addiert werden. Das Flag tm_isdst gibt mit einem Wert ungleich 0 an, ob die Sommerzeitkonvertierung durchgeführt wurde.

Rückgabewert

localtime liefert einen Zeiger auf die Struktur mit den Zeitangaben. Diese Struktur vom Typ static wird durch jeden Aufruf dieser Funktionen überschrieben.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


lock

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int lock(int handle, long offset, long length);

Beschreibung

Sperrt Teile einer Datei für den gemeinsamen Zugriff. DOS-Anwender müssen zuvor SHARE.EXE geladen haben.

lock bietet eine Schnittstelle zu den vom Betriebssystem bereitgestellten Verfahren für den gemeinsamen Dateizugriff (file-sharing).

lock kann beliebige Bereiche einer Datei sperren, die sich jedoch nicht überschneiden dürfen. Jedes Programm, das auf einen gesperrten Bereich zugreifen will, wiederholt diese Operation dreimal und bricht dann mit einem Fehler ab.

Rückgabewert

Die Funktion liefert bei fehlerfreier Ausführung den Wert 0. Andernfalls wird der Wert -1 zurückgeliefert und die globale Variable errno auf folgenden Wert gesetzt:

EACCES	Zugriff nicht gestattet


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


locking

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

#include <sys\locking.h>

int locking(int handle, int cmd, long length);

Beschreibung

Sperrt oder entsperrt Teile einer Datei für den gemeinsamen Zugriff. DOS-Benutzer müssen zuvor SHARE.EXE laden.

locking bietet eine Schnittstelle zu den vom Betriebssystem bereitgestellten Verfahren für den gemeinsamen Dateizugriff (file-sharing). Die Funktion sperrt/entsperrt length Bytes der durch handle bezeichneten offenen Datei ab der durch offset vorgegebenen Position.

Mit locking lassen sich beliebig viele Bereiche einer Datei sperren, die sich jedoch nicht überlappen dürfen. Jedes Programm, das auf einen gesperrten Bereich zugreifen will, wiederholt diese Operation dreimal und bricht dann mit einem Fehler ab.

cmd gibt die durchzuführende Operation an. Folgende Konstanten sind dafür in sys\locking.h definiert:

LK_LOCK	Sperren des Bereichs. Ist das Sperren nicht möglich, wird der Sperrversuch 10 Sekunden lang im 1-Sekunden-Takt wiederholt. Anschließend erfolgt ein Abbruch.

LK_RLCK	Wie LK_LOCK.

LK_NBLCK	Sperren des Bereichs. Es erfolgt ein sofortiger Abbruch, wenn die Sperrung nicht möglich ist.

LK_NBRLCK	Wie LK_NBLCK.

LK_UNLCK	Entsperren des Bereichs (dieser Bereich muß vorher gesperrt worden sein).

Rückgabewert

Die Funktion liefert bei fehlerfreier Ausführung den Wert 0. Andernfalls wird der Wert -1 zurückgeliefert und die globale Variable errno auf einen der folgenden Werte gesetzt:

EACCES	Datei bereits gesperrt bzw. entsperrt

EBADF	Ungültiges Datei-Handle

EDEADLOCK	Datei konnte nach 10 Versuchen nicht gesperrt werden (cmd ist LK_LOCK oder LK_RLCK)

EINVAL	Ungültiges cmd oder SHARE.EXE nicht geladen


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


log, logl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double log(double x);

long double logl(long double x);

Beschreibung

Berechnet den natürlichen Logarithmus des Arguments x.

log berechnet den natürlichen Logarithmus von x.

logl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

log und logl liefern das Ergebnis der Berechnung zurück, d.h. ln(x).

Ist x ein reelles Argument und kleiner als 0, so setzen log10 und log10l die globale Variable errno auf den Wert

EDOM	Bereichsfehler

Ist x gleich 0, dann liefern die Funktionen den negativen Wert HUGE_VAL (log10) bzw. _LHUGE_VAL (log10l) zurück. Die Fehlerbehandlung für diese Routinen kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
log	+	+	+	+	+	+	+
logl	+		+	+			+


log10, log10l

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double log10(double x);

long double log10l(long double x);

Beschreibung

Berechnet den Logarithmus des Arguments zur Basis 10.

log10l ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

log10 und log10l liefern das Ergebnis der Berechnung von [image] zurück.

Ist x ein reelles Argument und kleiner als 0, so setzen log10 und log10l die globale Variable errno auf den Wert

EDOM	Bereichsfehler

Ist x gleich 0, dann liefern die Funktionen den negativen Wert HUGE_VAL (log10) bzw. -_LHUGE_VAL (log10l) zurück. Die Fehlerbehandlung für log10 und log10l kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
log10	+	+	+	+	+	+	+
log10l	+		+	+			+


longjmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <setjmp.h>

void longjmp(jmp_buf jmpb, int retval);

Beschreibung

Führt ein nicht-lokales goto aus.

Ein Aufruf von longjmp stellt den Task-Zustand vom letzten Aufruf von setjmp mit dem Argument jmpb wieder her. Das Programm wird an dieser Stelle so fortgesetzt, als hätte setjmp den Wert retval zurückgeliefert.

Ein Task-Zustand beinhaltet:

Win 16	Win 32
Alle Segmentregister (CS, DS, ES, SS)	Segmentregister werden nicht gesichert
Registervariablen	Registervariablen
DI,SI	EBX, EDI, ESI
Stack-Zeiger SP	Stack-Zeiger ESP
Frame-Zeiger BP	Frame-Zeiger EBP
Flags	Flags werden nicht gesichert
Ein Task-Zustand ist so vollständig, daß mit Hilfe von setjmp und longjmp Ko-Routinen implementiert werden können.

setjmp muß vor longjmp aufgerufen werden. Die Routine, die setjmp aufgerufen und jmpb einrichtet hat, muß beim Aufruf von longjmp noch aktiv sein und darf daher nicht zwischenzeitlich beendet worden sein. Andernfalls sind die Ergebnisse nicht vorhersehbar.

longjmp kann den Wert 0 nicht übergeben. Wird retval auf 0 gesetzt, so ersetzt longjmp diesen Wert durch 1.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+ 	+	+


lowvideo

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void lowvideo(void);

Beschreibung

Setzt das Textattribut für nachfolgende Zeichenausgaben auf "niedrige Intensität".

lowvideo löscht das Bit für "hohe Intensität" der aktuellen Vordergrundfarbe. Bereits ausgegebene Zeichen bleiben unverändert - es sind nur solche Zeichen betroffen, die von Funktionen mit direkter Textausgabe auf die Konsole nach dem Aufruf von lowvideo ausgegeben werden.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_lrotl, _lrotr

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

unsigned long _lrotl(unsigned long val, int count);

unsigned long _lrotr(unsigned long val, int count);

Beschreibung

Rotiert einen unsigned long-Wert bitweise nach links oder rechts.

_lrotl rotiert den als val übergebenen Wert um count Bitpositionen nach links. _lrotr rotiert den als val übergebenen Wert um count Bitpositionen nach rechts.

Rückgabewert

Die Funktionen liefern den rotierten Integerwert zurück:

_lrotl liefert den um count Bitpositionen nach links rotierten Wert von val zurück.

_lrotr liefert den um count Bitpositionen nach rechts rotierten Wert von val zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


lsearch

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void *lsearch(const void *key, void *base, size_t *num, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

Beschreibung

lsearch dient zum Durchsuchen von Tabellen.

Da es sich um eine lineare Suche handelt, können die Elemente im Gegensatz zu bsearch auch in unsortierter Form vorliegen. Kann lsearch das durch den Parameter key bezeichnete Element in der Tabelle nicht finden, wird es neu in die Tabelle aufgenommen.

base muß auf das erste Element der Tabelle (Index 0) zeigen.

num zeigt auf einen Integer, der die Anzahl der Tabellenelemente enthält.

width gibt die Größe eines einzelnen Elements in Bytes an.

key zeigt auf das zu suchende Element (den Suchschlüssel).

Die Funktion fcmp muß mit der Aufrufkonvention _USERENTRY verwendet werden.

Der Parameter fcmp zeigt auf eine benutzerdefinierte Routine, die jeweils zwei Elemente vergleicht und einen auf diesem Vergleich basierenden Wert zurückliefert.

Während der Suche ruft lsearch diese Routine, deren Adresse in fcmp übergeben wird, mehrfach auf.

Bei jedem Aufruf der Vergleichsroutine übergibt lsearch dieser zwei Argumente:

key	einen Zeiger auf den Suchschlüssel

elem	einen Zeiger auf das zu vergleichende Tabellenelement.

fcmp kann den Suchschlüssel und die Tabellenelemente auf jede beliebige Art und Weise interpretieren.

Rückgabewert

Die Funktion liefert die Adresse des ersten Elements der Tabelle zurück, das mit dem Suchschlüssel identisch ist.

Wenn *key ungleich *elem ist, gibt fcmp einen Wert ungleich Null zurück, ansonsten den Wert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


lseek

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

long lseek(int handle, long offset, int fromwhere);

Beschreibung

Versetzt den Dateizeiger.

lseek setzt den Dateizeiger der durch handle bezeichneten Datei auf eine neue Position, die offset Bytes von der durch fromwhere angegebenen Dateiposition entfernt ist. fromwhere muß dabei einer der folgenden in io.h definierten symbolischen Konstanten sein:

fromwhere	Dateiposition

SEEK_CUR	Aktuelle Position des Dateizeigers

SEEK_END	Dateiende

SEEK_SET	Dateianfang

Rückgabewert

lseek liefert bei fehlerfreier Ausführung die neue Zeigerposition, gemessen in Bytes vom Dateianfang, zurück. Im Fehlerfall wird der Wert -1L zurückgeliefert, und die globale Variable errno erhält einen der folgenden Werte:

EBADF	Ungültiges Handle

EINVAL	Ungültiges Argument

ESPIPE	Suche auf Gerät nicht erlaubt

Kann auf dem jeweiligen Gerät (z. B. auf Terminals, Druckern, Schnittstellen usw.) keine Suche durchgeführt werden, ist der Rückgabewert undefiniert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_ltoa, _ltow, _i64toa, _ui64toa, _i64tow, _ui64tow

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *_ltoa(long value, char *string, int radix);

char *_i64toa(__int64 value, char *strP, int radix);

char *_ui64toa(unsigned __int64 value, char *strP, int radix);

// The following are Unicode versions

wchar_t *_ltow(long value, wchar_t *string, int radix);

wchar_t *_i64tow(__int64 value, wchar_t *strP, int radix);

wchar_t *_ui64tow(unsigned __int64 value, wchar_t *strP, int radix);

Beschreibung

Konvertiert einen Wert vom Typ long in einen String.

_ltoa konvertiert den übergebenen Wert value in einen nullterminierten String und speichert den Rückgabewert an der durch string angegebenen Adresse. _ltoa erwartet für value einen Wert vom Typ long.

Der Parameter radix legt die Basis fest, auf der die Konvertierung stattfinden soll - mögliche Werte liegen im Bereich von 2 bis 36. Wenn radix den Wert 10 hat und value negativ ist, stellt _ltoa dem Ergebnis ein Minuszeichen voran.

Hinweis:	Der für string reservierte Speicher muß groß genug sein, um das Ergebnis der Konvertierung inklusive des abschließenden NULL-Zeichens (\0) aufnehmen zu können. _ltoa kann bis zu 33 Bytes zurückgeben.

Rückgabewert

Die Funktion liefert den Zeiger auf string zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_makepath, _wmakepath

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void _makepath(char *path, const char *drive, const char *dir, const char *name, const char *ext);

void _wmakepath(wchar_t *path, const wchar_t *drive, const wchar_t *dir, const wchar_t *name, const wchar_t *ext);

Beschreibung

Erzeugt einen Pfadnamen aus einzelnen Komponenten.

_makepath erzeugt einen Pfadnamen aus Einzelkomponenten. Der neue Pfadname heißt

X:\DIR\SUBDIR\NAME.EXT

Dabei gilt:

drive	=	 X:

dir	= 	\DIR\SUBDIR\

name	= 	NAME

ext	= .	EXT

Ist drive leer oder NULL, wird keine Laufwerksbezeichnung in den Pfadnamen eingefügt. Fehlt nach drive der abschließende Doppelpunkt (:), wird er automatisch in den Pfadnamen eingefügt.

Ist dir leer oder NULL, wird kein Verzeichnis in den Pfadnamen eingefügt. Fehlt nach dir der abschließende Schrägstrich (\ oder /), wird automatisch ein umgekehrter Schrägstrich (Backslash) in den Pfadnamen eingefügt.

Ist name leer oder NULL, wird kein Dateiname in den Pfadnamen eingefügt.

Ist ext leer oder NULL, wird keine Namenserweiterung in den Pfadnamen eingefügt. Fehlt der Punkt (.) zu Beginn der Namenserweiterung, wird er automatisch in den Pfadnamen eingefügt.

_makepath setzt voraus, daß der mit path übergebene String eine ausreichende Größe für den konstruierten Pfadnamen hat. Die Maximalgröße ist _MAX_PATH, wobei _MAX_PATH in stdlib.h definiert ist.

_makepath und _splitpath verhalten sich invers zueinander. Die Anwendung von _makepath auf die durch _splitpath ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


malloc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h> or #include<alloc.h>

void *malloc(size_t size);

Beschreibung

malloc reserviert einen Speicherbereich von size Bytes auf dem Heap. Damit kann ein Programm Speicherplatz genau nach Bedarf und exakt in der benötigten Größe reservieren.

Es wird Hauptspeicher reserviert. Der Heap wird für die dynamische Reservierung von Speicherbereichen variabler Größe benutzt. Viele Datenstrukturen wie beispielsweise Bäume und Listen reservieren Speicher auf dem Heap.

In den kleinen Datenmodellen, mit denen 16-Bit-Programme arbeiten, liegt der Heap zwischen dem oberen Ende des Datensegments und dem unteren Ende des Programm-Stack. Der Heap reserviert den gesamten hier zur Verfügung stehenden Speicherbereich bis auf einige Bytes direkt unterhalb der Stack-Spitze, die für Stack-Vergrößerungen und für das Betriebssystem reserviert sind.

In den großen Datenmodellen beginnt der Heap oberhalb des Stack und endet mit der höchsten vom System zur Verfügung gestellten Speicheradresse.

Rückgabewert

malloc liefert bei fehlerfreier Ausführung einen Zeiger auf den neu reservierten Speicherbereich. Wenn kein Speicherbereich ausreichender Größe zur Verfügung steht, dann ist der Rückgabewert NULL, und es findet keine Initialisierung des Speicherblocks statt. Wenn der Parameter size den Wert 0 hat, liefert malloc NULL zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+ 	+	+


_matherr, _matherrl

Beispiel	Portabilität

Syntax

#include <math.h>

int _matherr(struct _exception *e);

int _matherrl(struct _exceptionl *e);

Beschreibung

Vom Programmierer modifizierbare Routinen zur Behandlung von Berechnungsfehlern.

_matherr wird aufgerufen, wenn die Mathematikbibliothek einen Fehler erzeugt.

_matherrl ist die long double Version. Sie wird aufgerufen, wenn eine mathematische Funktion vom Typ long double einen Fehler erzeugt.

Sie können _matherr und _matherrl modifizieren und eigene Routinen zur Fehlerbehandlung schreiben.

_matherr und _matherrl sind besonders zum Aufspüren von Definitions- und Wertebereichsfehlern geeignet. Ausnahmen, die bei der Gleitkommrechnung generiert werden (wie Division durch Null), werden nicht gefunden. Solche Fehler müssen mit signal aufgespürt werden.

_matherr und _matherrl können vom Programmierer für die Behandlung spezieller Fehler beliebig erweitert und modifiziert werden. Anstelle der Version in der C-Bibliothek wird dann die modifizierte Funktion verwendet. Wenn die Routine den Fehler korrigieren kann, sollte sie einen Wert ungleich Null zurückliefern, andernfalls den Wert 0. Liefern _matherr oder _matherrl einen Wert ungleich Null zurück, wird die globale Variable errno nicht geändert und es wird keine Fehlermeldung ausgegeben.

Die Strukturen _exception und _exceptionl sind in math.h folgendermaßen definiert:

struct _exception {

   int   type;

   char  *name;

   double arg1, arg2, retval;

};

struct _exceptionl {

   int   type;

   char  *name;

   long double arg1, arg2, retval;

};

Die Elemente der Strukturen _exception und _exceptionl werden in der folgenden Tabelle beschrieben:

Element	Inhalt

type	beschreibt die Art des aufgetretenen Fehlers und ist in math.h als Aufzählungstyp _mexcep definiert (siehe Liste weiter unten).

name	zeigt auf einen nullterminierten String mit dem Namen der mathematischen Funktion, durch die der Fehler ausgelöst wurde.

arg1, arg2	enthalten die Werte der Argumente, die der mathematischen Funktion übergeben wurden. Wenn die Funktion nur einen Wert erwartet, dann ist dieser Wert in arg1 gespeichert.

retval	enthält den Standardwert, den _matherr oder _matherrl zurückliefern. Dieser Wert kann vom Programmierer geändert werden.

typedef _mexcep, ebenfalls in math.h definiert, beschreibt die folgenden Fehlerarten:

Symbolische Konstante 	Mathematische Fehler

DOMAIN	Das Argument liegt außerhalb des gültigen Definitionsbereichs für die Funktion. Beispiel: log(-1).

SING	Der Rückgabewert wäre eine mathematische Singularität. Beispiel: pow(0, -2).

OVERFLOW	Das Argument würde einen Rückgabewert erzeugen, dessen Wert größer als DBL_MAX (bzw. LDBL_MAX) ist. Beispiel: exp(1000).

UNDERFLOW	Das Argument würde einen Rückgabewert erzeugen, dessen Wert kleiner als DBL_MIN (bzw. LDBL_MIN) ist. Beispiel: exp(-1000).

TLOSS	Das Argument würde einen Rückgabewert erzeugen, bei dem sämtliche Dezimalstellen ungenau sind. Beispiel: sin(10e70).

Die Makros DBL_MAX, DBL_MIN, LDBL_MAX und LDBL_MIN sind in float.h definiert.

Den Quelltext der vordefinierten Versionen von _matherr und _matherrl finden Sie auf den C++Builder-Disketten.

Die UNIX-Versionen von _matherr und _matherrl (Ausgabe einer Meldung und Programmende) sind nicht ANSI-kompatibel. Sie finden die UNIX-Versionen dieser Routinen in den Dateien MATHERR.C und MATHERRL.C auf den C++Builder-Disketten.


Gleitkomma-Ausnahmen maskieren

Standardmäßig bricht ein Programm ab, wenn ein Gleitkomma-Überlauf auftritt oder eine Division durch 0 auszuführen ist. Sie können diese Gleitkomma-Ausnahmen durch den Aufruf von _control87 in main maskieren, bevor Gleitkommarechnungen durchgeführt werden.

Beispiel

#include <float.h>

main() {

   _control87(MCW_EM,MCW_EM);

   .

   .

   .

}

Mit _status87 oder _clear87.können Sie anschließend bestimmen, ob eine Gleitkomma-Ausnahme aufgetreten ist.

Bestimmte mathematische Fehler können auch in Bibliotheksfunktionen auftreten (z.B. dann, wenn Sie versuchen, die Quadratwurzel aus einer negativen Zahl zu ziehen). Standardmäßig wird dann eine Fehlermeldung auf den Bildschirm ausgegeben und anschließend eine NAN (Not-A-Number, eine Nicht-IEEE-Zahl) zurückgeliefert. Die Benutzung einer NAN entspricht der Erzeugung einer Ausnahme, wodurch das Programm abbricht, wenn die Ausnahme nicht maskiert ist. Um die Ausgabe der Fehlermeldung zu verhindern, fügen Sie folgende Version von _matherr in Ihr Programm ein:

#include <math.h>

int _matherr(struct _exception *e)

{

   return 1;             /* Fehler wurde behandelt */

}

Andere Verwendungen von _matherr zur Behandlung mathematischer Fehler sind nicht empfehlenswert, weil sie möglicherweise zukünftig nicht mehr vom C++Builder unterstützt werden.

Rückgabewert

Die vordefinierten Versionen von _matherr und _matherrl liefern für UNDERFLOW und TLOSS den Wert 1 zurück. In allen anderen Fällen wird der Wert 0 zurückgeliefert. _matherr und _matherrl könnenden Wert von e ->retval beliebig verändern. e->retval wird dann von der Routine zurückgeliefert, die den Fehler verursacht hat.

Wenn _matherr oder _matherrl den Wert 0 zurückliefern (und damit anzeigen, daß der Fehler nicht behoben werden konnte), erhält die globale Variable errno den Wert 0, und eine Fehlermeldung wird ausgegeben.

Liefern _matherr oder _matherrl einen Wert ungleich Null zurück (und zeigen damit an, daß der Fehler behoben werden konnte), wird errno nicht gesetzt und keine Fehlermeldung ausgegeben.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


max

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h> /* macro version */

(type) max(a, b);

template <class T> T max( T t1, T t2 ); // C++ only

Beschreibung

Liefert den größeren von zwei Werten zurück.

Das C-Makro und die C++ Template-Funktion vergleichen zwei Werte und liefern den größeren der beiden zurück. Sowohl die beiden Argumente als auch die Deklaration der Routine müssen vom gleichen Typ sein.

Rückgabewert

max liefert den größeren der beiden Werte zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_mbbtype

Siehe auch

Syntax

#include <mbstring.h>

int _mbbtype(unsigned char ch, int mode);

Beschreibung

Die Funktion _mbbtype prüft das Multibyte-Argument ch und bestimmt, ob es sich um ein Einzelbyte-Zeichen handelt oder um das führende oder folgende Byte eines Multibyte-Zeichens. Die Funktion _mbbtype kann feststellen, ob ch ein gültiges Zeichen ist.

Rückgabewert

_mbbtype liefert eine der folgenden, in mbctype.h definierten Konstanten zurück. Der Rückgabewert ist vom Wert des Arguments ch sowie vom auszuführenden Test abhängig.

Wert von mode	Wert von ch	Auszuführender Test 	Rückgabewert

mode != 1	Einzelbyte	Einzelbyte oder führendes Byte	_MBC_SINGLE

mode != 1	führendes Byte	Einzelbyte oder führendes Byte	_MBC_LEAD

mode = 1	folgendes Byte	Einzelbyte oder folgendes Byte	_MBC_TRAIL

beliebig	beliebig	gültiges Zeichen	_MBC_ILLEGAL


_mbccmp


_mbccpy

Syntax

#include <mbstring.h>

void _mbccpy(unsigned char *dest, unsigned char *src);

Beschreibung

Die Funktion _mbccpy kopiert ein Multibyte-Zeichen von src nach dest. Die Funktion ruft dazu _ismbblead auf, so daß der Zeiger src auf ein führendes Byte zeigt. Wenn dies nicht der Fall ist, wird der Kopiervorgang nicht ausgeführt.

Rückgabewert

Keiner.


mblen

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int mblen(const char *s, size_t n);

Beschreibung

Ermittelt die Länge eines Multibyte-Zeichens.

Ist s ungleich NULL, bestimmt mblen die Anzahl der Bytes des Zeichens, auf das s zeigt. Der Parameter n legt fest, wieviele Bytes maximal geprüft werden.

Das Verhalten von mblen ist von der Locale-Kategorie LC_CTYPE abhängig.

Rückgabewert

Ist s gleich NULL, liefert mblen einen Wert ungleich Null zurück, wenn Multibyte-Zeichen Statuscodierungen enthalten. Andernfalls liefert mblen den Wert 0 zurück.

Ist s ungleich NULL, dann liefert mblen den Wert 0, wenn s auf ein Nullzeichen (\0) zeigt. Enthalten die nächsten n Bytes kein gültiges Multibyte-Zeichen, so wird -1 zurückgeliefert. Ansonsten wird die Anzahl der Bytes zurückgeliefert, die ein gültiges Multibyte-Zeichen enthalten.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


_mbsbtype

Siehe auch

Syntax

#include <mbstring.h>

int _mbsbtype(const unsigned char *str, size_t nbyte);

Beschreibung

Der Parameter nbyte bestimmt die Anzahl der Bytes ab dem Beginn des nullterminierten Strings.

Die Funktion _mbsbtype prüft das Argument str und bestimmt, ob das Byte an der mit nbyte angegebenen Position ein Einzelbyte-Zeichen ist oder das führende oder folgende Byte eines Multibyte-Zeichens. Die Funktion kann feststellen, ob das Byte ein ungültiges Zeichen oder ein NULL-Byte darstellt.

Alle ungültigen Bytes in str, die vor nbyte liegen, werden ignoriert.

Rückgabewert

_mbsbtype liefert eine der folgenden, in mbctype.h definierten Konstanten:

Gesuchter Typ	Rückgabewert

Einzelbyte	_MBC_SINGLE
führendes Byte	_MBC_LEAD
folgendes Byte	_MBC_TRAIL
ungültiges Zeichen/Byte	_MBC_ILLEGAL


_mbsnbcmp

Siehe auch

Syntax

#include <mbstring.h>

int _mbsnbcmp(const unsigned char *s1, const unsigned char s2, size_t maxlen);

Beschreibung

_mbsnbcmp vergleicht s1 und s2 (unter Berücksichtigung von Groß- und Kleinschreibung) auf eine Länge von maximal maxlen Bytes. Die Funktion beginnt mit dem ersten Byte in jedem String und setzt den Vergleich mit den folgenden Bytes fort, bis zwei Bytes nicht übereinstimmen oder maxlen Bytes verglichen sind.

_mbsnbcmp berücksichtigt Groß- und Kleinschreibung.

_mbsnbcmp ist unabhängig von Locale.

_mbsnbcmp vergleicht die Bytes anhand der aktuellen Multibyte-Zeichensatztabelle.

Rückgabewert

_mbsnbcmp liefert einen Integerwert zurück, der vom Vergleich von s1 (ganz oder teilweise) mit s2 (ganz oder teilweise) abhängt:

< 0	wenn s1 kleiner ist als s2

== 0	wenn s1 mit s2 übereinstimmt

> 0	wenn s1 größer ist als s2


_mbsnbcoll, _mbsnbicoll

Siehe auch

Syntax

#include <mbstring.h>

int _mbsnbcoll(const unsigned char *s1, const unsigned char *s2, maxlen);

int _mbsnbicoll(const unsigned char *s1, const unsigned char *s2, maxlen);

Beschreibung

_mbsnbicoll ist die ohne Berücksichtigung der Schreibweise arbeitende Version von _mbsnbcoll.

Diese Funktionen unterziehen die durch die Argumente s1 und s2 bezeichneten Strings einem Vergleich in lexikographischer Reihenfolge entsprechend der aktuellen Multibyte-Zeichensatztabelle. Es werden maximal maxlen Bytes verglichen.

Hinweis:	Die lexikographische Reihenfolge entspricht nicht immer der Reihenfolge der Zeichen im Zeichensatz.

Ist das letzte Byte in s1 oder s2 ein führendes Byte, wird es nicht verglichen.

Rückgabewert

Jede dieser Funktionen liefert einen Integerwert zurück, der vom Vergleich von s1 (ganz oder teilweise) mit s2 (ganz oder teilweise) abhängt:

< 0	wenn s1 kleiner ist als s2

== 0	wenn s1 mit s2 übereinstimmt

> 0	wenn s1 größer ist als s2

Im Fehlerfall gibt jede Funktion _NLSCMPERROR zurück.


_mbsnbcpy

Siehe auch

Syntax

#include <mbstring.h>

unsigned char *_mbsnbcpy(unsigned char *dest, unsigned char *src, size_t maxlen);

Beschreibung

Die Funktion _mbsnbcpy kopiert maximal maxlen Zeichen aus dem Puffer src in den Puffer dest. Der Puffer dest ist nach dem Kopiervorgang nullterminiert.

Der Benutzer muß dafür sorgen, daß dest groß genug ist, um die zu kopierenden Zeichen aufzunehmen. Eine unzureichende Puffergröße kann zu einer fehlerhaften Speicherbelegung führen.

Rückgabewert

Die Funktion liefert dest zurück.


_mbsnbicmp

Siehe auch

Syntax

#include <mbstring.h>

int _mbsnbicmp(const unsigned char *s1, const unsigned char s2, size_t maxlen);

Beschreibung

_mbsnbicmp vergleicht s1 und s2 (ohne Berücksichtigung von Groß- und Kleinschreibung) auf eine Länge von maximal maxlen Bytes. Die Funktion beginnt mit dem ersten Byte in jedem String und setzt den Vergleich mit den folgenden Bytes fort, bis zwei Bytes nicht übereinstimmen oder maxlen Bytes verglichen sind.

_mbsnbicmp berücksichtigt nicht die Schreibweise (Groß- und Kleinschreibung).

_mbsnbicmp ist unabhängig von Locale.

_mbsnbicmp vergleicht die Bytes anhand der aktuellen Multibyte-Zeichensatztabelle.

Rückgabewert

_mbsnbicmp liefert einen Integerwert zurück, der vom Vergleich von s1 (ganz oder teilweise) mit s2 (ganz oder teilweise) abhängt:

< 0	wenn s1 kleiner ist als s2

== 0	wenn s1 mit s2 übereinstimmt

> 0	wenn s1 größer ist als s2


_mbsnbset

Siehe auch

Syntax

#include <mbstring.h>

unsigned char *_mbsnbset(unsigned char str, unsigned int ch, size_t maxlen);

Beschreibung

_mbsnbset ersetzt maximal maxlen Bytes im String str durch das Zeichen ch. Beim Argument ch kann es sich um ein Einzel- oder ein Multibyte-Zeichen handeln.

Die Funktion beendet ihre Arbeit, wenn das abschließende NULL-Zeichen gefunden wird, bevor maxlen Bytes ersetzt sind. Ist ch ein Multibyte-Zeichen, das nicht am Ende von str eingefügt werden kann, wird das letzte Zeichen in str durch ein Leerzeichen ersetzt.

Rückgabewert

strset liefert str zurück.


_mbsninc, _strninc, _wcsninc

Siehe auch

Syntax

#include <mbstring.h>

unsigned char *_mbsninc(const unsigned char *str, size_t num);

Beschreibung

Diese Funktionen sollten über das portable Makro _tcsninc aufgerufen werden, das in tchar.h definiert ist.

Die Funktionen vergrößern das Zeichen-Array str um num Zeichen.

Rückgabewert

Die Funktionen liefern einen Zeiger auf den vergrößerten Zeichen-String, der durch das Argument str angegeben ist.


_mbsnbcnt, _mbsnccnt, _strncnt, _wcsncnt

Siehe auch

Syntax

#include <mbstring.h>

size_t  _mbsnbcnt(const unsigned char * str, size_t nmbc);

size_t  _mbsnccnt(const unsigned char * str, size_t nbyte);

Beschreibung

Wenn _MBCS definiert ist:

·	_mbsnbcnt ist dem portablen Macro _tcsnbcnt zugeordnet.

·	_mbsnccnt ist dem portablen Macro _tcsnccnt zugeordnet.

Wenn _UNICODE definiert ist:

·	Sowohl _mbsnbcnt als auch _mbsnccnt sind dem Makro _wcsncnt zugeordnet.

Wenn weder _MBCS noch _UNICODE definiert sind:

·	_tcsnbcnt und _tcsnccnt sind dem Makro _strncnt zugeordnet.

_strncnt ist die Einzelbyte-Version dieser Funktionen.

_wcsncnt ist die wide-character-Version dieser Funktionen.

_strncnt und _wcsncnt sind für allgemeine Textzuordnungen konzipiert und sollten nicht direkt benutzt werden.

_mbsnbcnt prüft die ersten nmbc-Multibyte-Zeichen im Argument str. Die Funktion gibt die Anzahl der in diesen Bytes gefundenen Zeichen zurück.

_mbsnccnt prüft die ersten nmbc-Multibyte-Zeichen im Argument str. Die Funktion gibt die Anzahl der in diesen Zeichen gefundenen Bytes zurück. Findet die Funktion den Wert NULL im zweiten Byte eines Multibyte-Zeichen, wird das gesamte Zeichen als NULL-Zeichen betrachtet und nicht in den Rückgabewert aufgenommen.

Jede der Funktionen beendet die Prüfung des Arguments str, wenn NULL erreicht wird, bevor die angegebene Anzahl von Zeichen oder Bytes geprüft ist.

Enthält str weniger als die angegebene Anzahl von Zeichen oder Bytes, gibt die Funktion die Anzahl der in str gefundenen Zeichen oder Bytes zurück.

Rückgabewert

_mbsnbcnt liefert die Anzahl der gefundenen Bytes.

_mbsnccnt gibt die Anzahl der gefundenen Zeichen zurück.

Ist nmbc oder nbyte kleiner als 0, geben die Funktionen den Wert 0 zurück.


_mbsspnp, _strspnp, _wcsspnp

Siehe auch	Beispiel

Syntax

#include <mbstring.h>

unsigned char *_mbsspnp(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Benutzen Sie das portable Makro _tcsspnp (definiert in tchar.h) zum Zugriff auf diese Funktionen.

Jede dieser Funktionen sucht nach dem ersten Zeichen in s1, das nicht in s2 enthalten ist.

Rückgabewert

Die Funktionen liefern einen Zeiger auf das erste Zeichen in s1, das nicht in s2 enthalten ist.

Ist jedes Zeichen aus s1 auch in s2 enthalten, gibt jede der Funktionen den Wert NULL zurück.


mbstowcs

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);

Beschreibung

Konvertiert einen Multibyte-String in ein wchar_t-Array.

mbstowcs konvertiert den Multibyte-String s in das durch pwcs bezeichnete Array. In diesem Array werden maximal n Werte gespeichert. Trifft mbstowcs auf eine ungültige Multibyte- Sequenz, wird (size_t)-1 zurückgeliefert.

Wenn mbstowcs den Wert n zurückliefert, wird das Array pwcs nicht durch ein Nullzeichen abgeschlossen.

Rückgabewert

Die Funktion mbstowcs liefert (size_t)-1 zurück, wenn sie auf eine ungültige Multibyte-Sequenz trifft. Andernfalls wird die Anzahl der geänderten Array-Elemente zurückgeliefert (das abschließende Zeichen ist - falls vorhanden - darin nicht enthalten).


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


mbtowc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int mbtowc(wchar_t *pwc, const char *s, size_t n);

Beschreibung

Konvertiert ein Multibyte-Zeichen in einen Wert des Typs wchar_t.

Ist s ungleich NULL, stellt mbtowc die Anzahl der Bytes fest, aus der das durch s angegebene Multibyte-Zeichen besteht. Anschließend prüft mbtowc den Wert des Typs wchar_t, der dem Multibyte-Zeichen entspricht. Besteht eine Übereinstimmung zwischen wchar_t  und dem Multibyte-Zeichen und ist pwc ungleich NULL, wird der Wert von wchar_t in dem Array gespeichert, auf das pwc zeigt. Der Parameter n legt fest, wieviele Bytes maximal untersucht werden.

Rückgabewert

Zeigt s auf ein ungültiges Multibyte-Zeichen, wird -1 zurückgeliefert. Zeigt s auf ein NULL-Zeichen, hat mbtowc den Rückgabewert 0. In allen anderen Fällen liefert mbtowc die Anzahl der Bytes zurück, aus denen sich das konvertierte Multibyte-Zeichen zusammensetzt.

Der Rückgabewert ist nie größer als MB_CUR_MAX oder der Wert von n.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


memccpy
memccpy, _fmemccpy

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

void *memccpy(void *dest, const void *src, int c, size_t n);

Beschreibung

Kopiert einen Block mit n Bytes.

memccpy ist unter UNIX System V verfügbar.

Die Funktion kopiert einen Block mit n Bytes von src nach dest. Der Kopiervorgang wird abgebrochen, wenn folgendes eintritt:

Das Zeichen c wird zum erstenmal nach dest kopiert.

n Bytes wurden nach dest kopiert.

Rückgabewert

memccpy liefert NULL zurück, wenn n Bytes kopiert wurden (und kein Byte des Wertes c dabei gefunden wurde). Wurde memccpy dagegen durch die Kopie eines Byte mit dem Wert c beendet, dann wird ein Zeiger zurückgeliefert, der auf das nächste Byte nach dem kopierten Wert c in dest zeigt.

Wenn c kopiert wurde, liefert memccpy einen Zeiger auf das Byte in dest, das unmittelbar auf c folgt. Andernfalls wird NULL zurückgegeben.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memccpy	+	+	+	+			+


_fmemccpy	+		+


memchr, _wmemchr

Beispiel	Portabilität

Syntax

#include <mem.h>

void *memchr(const void *s, int c, size_t n);                       /* C only */

const void *memchr(const void *s, int c, size_t n);                  // C++ only

void *memchr(void *s, int c, size_t n);                              // C++ only

void *memchr(const void *s, int c, size_t n);

void * _wmemchr(void *s, int c, size_t n);

Beschreibung

Durchsucht n Bytes nach dem Zeichen c.

memchr ist unter UNIX System V verfügbar.

Die Funktion sucht in den ersten n Bytes des Blocks, auf den s zeigt, nach dem Zeichen c.

Rückgabewert

memchr liefert die Adresse des ersten Vorkommens von c in s bzw. NULL, wenn c nicht vorkommt.

Hinweis:	Wenn Sie die Intrinsic-Version der Funktionen benutzen, wird für n=0 der Wert NULL zurückgeliefert.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memchr	+	+	+	+	+	+	+


_fmemchr	+		+


memcmp
memcmp, _fmemcmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

int memcmp(const void *s1, const void *s2, size_t n);

Beschreibung

Vergleicht zwei Blöcke auf eine Länge von exakt n Bytes.

memcmp ist unter UNIX System V verfügbar.

Die Funktion vergleicht die ersten n Bytes der Blöcke s1 und s2 miteinander und behandelt die Bytes als unsigned char.

Rückgabewert

Da die Bytes als unsigned char verglichen werden, gibt memcmp einen der folgenden Werte zurück:

< 0	falls s1 kleiner als s2 ist

= 0	falls s1 und s2 übereinstimmen

> 0	falls s1 größer als s2 ist

Beispielsweise liefert

memcmp("\xFF", "\x7F", 1)

einen Wert größer Null.

Hinweis: 	Wenn Sie die Intrinsic-Version der Funktionen benutzen, wird für n=0 der Wert 0 zurückgeliefert.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memcmp	+	+	+	+	+	+	+


_fmemcmp	+		+


memcpy, _wmemcpy
memcpy, _fmemcpy

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

void *memcpy(void *dest, const void *src, size_t n);

void *_wmemcpy(void *dest, const void *src, size_t n);

Beschreibung

Kopiert einen Block von n Bytes.

memcpy ist unter UNIX System V verfügbar.

Die Funktion kopiert n Bytes von src nach dest. Überlappen sich scr und dest, ist das Verhalten von memcpy undefiniert.

Rückgabewert

memcpy liefert dest zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memcpy	+	+	+	+	+	+	+


_fmemcpy	+		+


memicmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

int memicmp(const void *s1, const void *s2, size_t n);

Beschreibung

Vergleicht die ersten n Bytes zweier Zeichen-Arrays, wobei nicht zwischen Groß- und Kleinschreibung unterschieden wird.

memicmp ist unter UNIX System V verfügbar.

Die Funktion vergleicht die ersten n Bytes der Blöcke s1 und s2 miteinander, wobei nicht zwischen Groß- und Kleinschreibung unterschieden wird.

Rückgabewert

memicmp liefert einen Wert

< 0	falls s1 kleiner als s2 ist

= 0	falls s1 und s2 übereinstimmen

> 0	falls s1 größer als s2 ist


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memicmp	+	+	+	+			+


_fmemicmp	+		+


memmove

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

void *memmove(void *dest, const void *src, size_t n);

Beschreibung

Kopiert einen Block von n Bytes.

Die Funktion kopiert n Bytes von src nach dest und berücksichtigt dabei automatisch eventuelle Überlappungen von Quell- und Zielbereich.

Rückgabewert

memmove liefert dest zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memmove	+	+	+	+	+	+	+


	+		+


memset, _wmemset
memset, _fmemset

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

void *memset(void *s, int c, size_t n);

void *_wmemset(void *s, int c, size_t n);

Beschreibung

Setzt n Bytes eines Speicherblocks auf den Wert von c.

memset setzt die ersten n Bytes im Array s auf den Wert von c.

Rückgabewert

memset liefert s zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
memset	+	+	+	+	+	+	+


_fmemset	+		+


min

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h> /* macro version */

(type) min(a, b);

template <class T> T min( T t1, T t2 ); // C++ only

Beschreibung

Gibt den kleineren von zwei Werten zurück.

Das C-Makro und die C++ Template-Funktion vergleichen zwei Werte und liefern den kleineren der beiden zurück. Sowohl die beiden Argumente als auch die Deklaration der Routine müssen vom gleichen Typ sein.

Rückgabewert

min liefert den kleineren der beiden Werte zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


mkdir, _wmkdir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int mkdir(const char *path);

int _wmkdir(const wchar_t *path);

Beschreibung

Erzeugt ein Verzeichnis.

mkdir ist unter UNIX verfügbar, benötigt dort aber einen zusätzlichen Parameter.

mkdir erzeugt ein Verzeichnis mit dem in path angegebenen Namen.

Rückgabewert

mkdir liefert den Wert 0 zurück, wenn das neue Verzeichnis erzeugt werden konnte.

Wenn ein Fehler auftritt, wird  -1 zurückgegeben und die globale Variable errno auf einen der beiden folgenden Werte gesetzt:

EACCES	Zugriff nicht gestattet

ENOENT	Datei oder Verzeichnis nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_mktemp, _wmktemp

Beispiel	Portabilität

Syntax

#include <dir.h>

char *_mktemp(char *template);

wchar_t *_wmktemp(wchar_t *template);

Beschreibung

Erzeugt einen eindeutigen Dateinamen.

mktemp ersetzt den durch template bezeichneten String durch einen eindeutigen Dateinamen und liefert template zurück.

template muß ein nullterminierter String mit sechs abschließenden X-Zeichen sein. Diese X-Zeichen werden so durch eine eindeutige Zeichenfolge ersetzt, daß der neue Dateiname zwei Zeichen, einen Punkt und drei folgende Zeichen enthält.

Beginnend mit AA.AAA wird der neue Dateiname zugewiesen, wobei bereits existierenden Namen dieses Formats auf dem Laufwerk erkannt und vermieden werden.

Rückgabewert

Wenn template richtig aufgebaut ist und ein eindeutiger Name zugewiesen werden kann, liefert _mktemp die Adresse des Strings template. Andernfalls wird NULL zurückgegeben.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


mktime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

time_t mktime(struct tm *t);

Beschreibung

Konvertiert die Uhrzeit in das Kalenderformat.

mktime konvertiert die Uhrzeit in der Struktur, auf die t zeigt, in eine Kalenderzeit mit dem Format der Funktion time. Die ursprünglichen Werte der Felder tm_sec, tm_min, tm_hour, tm_mday und tm_mon sind nicht auf den durch die tm-Struktur festgelegten Bereich beschränkt. Befinden sich die Felder nicht im korrekten Bereich, werden sie angepaßt. Die Werte der Felder tm_wday und tm_yday werden nach der Anpassung der anderen Felder berechnet.

Die zulässige Bereich für die Kalenderzeit liegt zwischen dem 1. Januar 1970 zum Zeitpunkt 00:00:00 und dem 19. Januar 2038 zum Zeitpunkt 03:14:07.

Rückgabewert

mktime liefert die Kalenderzeit wie beschrieben. Kann die Kalenderzeit nicht dargestellt werden, wird -1 zurückgegeben.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


modf, modfl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double modf(double x, double *ipart);

long double modfl(long double x, long double *ipart);

Beschreibung

Teilt einen double- oder long double-Wert in Vor- und Nachkommaanteil auf.

modf spaltet den double-Wert x in den ganzzahligen Vorkomma- und den Nachkomma-Anteil. modf speichert den ganzzahligen Vorkomma-Anteil in ipart und liefert den Nachkomma-Anteil zurück.

modfl ist die long double-Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

modf und modfl liefern den Nachkomma-Anteil des Arguments x zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
modf	+	+	+	+	+	+	+
modfl	+		+	+			+


movetext

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int movetext(int left, int top, int right, int bottom, int destleft, int desttop);

Beschreibung

Kopiert einen rechteckigen Ausschnitt des Textbildschirms in einen anderen Ausschnitt.

movetext kopiert aus dem Textbildschirm einen rechteckigen Ausschnitt, dessen obere linke Ecke durch (left, top) und dessen untere rechte Ecke durch (bottom, right) festgelegt ist, in einen rechteckigen Ausschnitt gleicher Größe, dessen obere linke Ecke mit (destleft, desttop) angegeben wird.

movetext arbeitet mit absoluten Bildschirmkoordinaten. Überlappende Ausschnitte werden korrekt kopiert.

movetext funktioniert nur im Textmodus und schreibt direkt in den Bildschirmspeicher.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Bei fehlerfreier Ausführung liefert movetext einen Wert ungleich Null zurück.

Wenn movetext nicht ausgeführt werden konnte (weil z. B. entweder der Quell- oder der Zielausschnitt außerhalb des aktuellen Bildschirmbereichs liegen), ist der Rückgabewert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_msize

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

size_t _msize(void *block);

Beschreibung

Liefert die Größe eines Heap-Blocks zurück.

_msize liefert die Größe des reservierten Heap-Blocks mit der Adresse block zurück. Der Bock muß zuvor mit malloc, calloc oder realloc reserviert worden sein. Der zurückgelieferte Wert kann größer sein als der, der bei der Speicherreservierung angefordert wurde.

Rückgabewert

_msize liefert die Blockgröße in Bytes zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


normvideo

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void normvideo(void);

Beschreibung

Stellt normale Intensität für nachfolgende Textausgaben ein.

normvideo setzt das Textattribut (Vorder- und Hintergrund) auf den Wert, der beim Start des Programms gültig war.

Bereits ausgegebene Zeichen bleiben unverändert - es wird lediglich das Zeichenattribut für Funktionen wie z.B. cprintf festgelegt, die direkte Bildschirmausgaben durchführen, nachdem die Funktion normvideo aufgerufen wurde.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


offsetof

Beispiel	Portabilität

Syntax

#include <stddef.h>

size_t offsetof(struct_type, struct_member);

Beschreibung

Ermittelt den Offset eines Strukturelements in Bytes.

offsetof ist nur als Makro verfügbar. Der Parameter struct_tpye ist vom Typ struct. struct_member ist ein beliebiges Element dieser Struktur, das über den Elementauswahloperator oder über Zeiger angesprochen werden kann.

Wird für struct_member ein Bitfeld angegeben, so ist das Ergebnis undefiniert.

Kapitel 2 im Programmierhandbuch enthält Informationen über den Operator sizeof sowie über Speicherreservierung und Ausrichtung von Strukturen.

Rückgabewert

offsetof liefert die Anzahl der Bytes zurück, die zwischen der Startadresse der Struktur und dem Anfang des angegebenen Strukturelements liegen.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


open, _wopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <fcntl.h>

#include<io.h>

int open(const char *path, int access [, unsigned mode]);

int _wopen(const wchar_t *path, int access [, unsigned mode]);

Beschreibung

Öffnet eine Datei für Lese- oder Schreibzugriffe.

open öffnet die durch path angegebene Datei und bereitet sie je nach Inhalt des Parameters access für Lese- bzw. Schreibzugriffe vor.

Um beim Erzeugen einer Datei einen bestimmten Zugriffsmodus festzulegen, kann die globale Variable _fmode verwendet oder ein Aufruf von open mit den Optionen O_CREAT und O_TRUNC, die über den Oder-Operator mit dem gewünschten Übersetzungssmodus verknüpft werden.

Beispielsweise erzeugt der Aufruf

open("XMP",O_CREAT|O_TRUNC|O_BINARY,S_IREAD)

die Datei XMP im binären Modus für einen Nur-Lesen-Zugriff und kürzt sie, falls sie bereits existiert, auf 0 Bytes.

Für open wird access durch bitweise ODER-Verknüpfung von Flags aus den folgenden Listen gebildet. Aus der ersten der beiden folgenden Listen muß genau ein Flag benutzt werden. Die restlichen Flags können in jeder logischen Kombination verwendet werden.

Diese symbolischen Konstanten sind in fcntl.h definiert.

Liste 1:. Flags für Lesen und/oder Schreiben

O_RDONLY	Nur Lesen

O_WRONLY	Nur Schreiben

O_RDWR	Lesen und Schreiben

Liste 2: Weitere Zugriff-Flags

O_NDELAY	Unbenutzt, ist nur aus Gründen der UNIX-Kompatibilität definiert.

O_APPEND	Neu geschriebene Daten werden am Dateiende angehängt.

O_CREAT	Wenn die Datei noch nicht existiert, wird sie erzeugt. Dabei werden die Bits von mode verwendet, um die Bits der Dateiattribute wie in chmod zu setzen. Falls die Datei bereits existiert, hat dieses Flag keine Wirkung.

O_TRUNC	Wenn die Datei bereits existiert, wird sie auf die Länge 0 verkürzt. Die Datei-attribute bleiben unverändert.

O_EXCL	Wird nur zusammen mit O_CREAT verwendet; falls die Datei bereits existiert, wird ein Fehler zurückgeliefert.

O_BINARY	Die Datei wird im binären Modus geöffnet.

O_TEXT	Die Datei wird im Textmodus geöffnet.

Wenn Sie weder O_BINARY noch O_TEXT angeben, wird die Datei in dem durch die globale Variable _fmode gesetzten Modus geöffnet.

Wird bei der Bildung von access das Flag O_CREAT benutzt, muß der Parameter mode über die folgenden symbolischen Konstanten festgelegt werden, die in sys/stat.h definiert sind:

Wert von mode	Zugriffserlaubnis

S_IWRITE	Schreiben erlaubt

S_IREA	Lesen erlaubt

S_IREAD S_IWRITE	Lesen und Schreiben erlaubt

Rückgabewert

Wenn die Datei fehlerfrei geöffnet werden konnte, liefert open das Handle dieser Datei zurück (einen Integerwert größer als 0). Der Dateizeiger (er markiert die aktuelle Position in der Datei) wird auf den Dateianfang gesetzt.

Im Fehlerfall gibt die Funktion den Wert -1 zurück und setzt die globale Variable errno auf einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

EINVACC	Ungültiger Zugriffscode

EMFILE	Zu viele Dateien offen

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


opendir, wopendir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dirent.h>

DIR *opendir(char *dirname);

wDIR *wopendir(const wchar_t *dirname);

Beschreibung

Öffnet einen Verzeichnis-Stream für Lesezugriffe.

opendir ist unter UNIX auf POSIX-Systemen verfügbar.

Die Funktion öffnet den Verzeichnis-Stream dirname für Lesezugriffe. Der Stream wird so eingerichtet, daß der erste Eintrag des Verzeichnisses gelesen werden kann.

Ein Verzeichnis-Stream wird durch die in dirent.h definierte DIR-Struktur repräsentiert. Auf die Felder dieser Struktur kann nicht zugegriffen werden. Es können gleichzeitig mehrere Verzeichnis-Streams geöffnet und gelesen werden. Während des Lesens können Verzeichniseinträge erstellt oder gelöscht werden.

Mit der Funktion readdir können aufeinanderfolgende Einträge aus einem Verzeichnis-Stream gelesen werden. Das Entfernen eines nicht mehr benötigten Verzeichnis-Stream erfolgt mit closedir.

Rückgabewert

Bei fehlerfreier Ausführung liefert opendir einen Zeiger auf den Verzeichnis-Stream zurück, der in Aufrufen von readdir, rewinddir und closedir verwendet werden kann.

Kann das Verzeichnis nicht geöffnet werden, liefert opendir den Wert NULL und setzt die globale Variable errno auf einen der folgenden Werte:

ENOENT	Das Verzeichnis existiert nicht.

ENOMEM	Nicht genug Speicher für die Reservierung eines DIR-Objekts.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_open_osfhandle

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _open_osfhandle(long osfhandle, int flags);

Beschreibung

Verbindet Datei-Handles.

Die Routine _open_osfhandle erzeugt zur Laufzeit ein Datei-Handle und verbindet es mit dem durch osfhandle angegebenen Datei-Handle des Betriebssystems.

flags ist eine (bitweise) ODER-Kombination der folgenden in fcntl.h definierten Konstanten:

O_APPEND	Setzt den Dateizeiger vor jeder Schreiboperation an das Dateiende.

O_RDONLEY	Datei wird nur zum Lesen geöffnet.

O_TEXT_	Datei wird im Übersetzungsmodus "Text" geöffnet.

Rückgabewert

Bei fehlerfreier Ausführung liefert _open_osfhandle ein Laufzeit-Datei-Handle zurück. Andernfalls wird der Wert -1 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+


_pclose

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _pclose(FILE * stream);

Beschreibung

Wartet auf die Beendigung eines über eine Pipe gestarteten Befehls.

_pclose schließt den Pipe-Stream, der durch einen vorherigen Aufruf von _popen erzeugt wurde, und wartet auf das Ende des zugehörigen Befehls.

Rückgabewert

Bei erfolgreicher Ausführung liefert _pclose den Abschlußstatus des untergeordneten Befehls zurück. Dieser Wert entspricht dem von cwait gelieferten Wert mit der Ausnahme, daß das niederwertige und das höherwertige Byte des niederwertigen Worts ausgetauscht werden.

Im Fehlerfall liefert _pclose den Wert -1 zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


perror, _wperror

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

void perror(const char *s);

void _wperror(const wchar_t *s);

Beschreibung

Schreibt eine Systemfehlermeldung.

perror schreibt die Systemfehlermeldung der letzten Bibliotheksroutine, die die globale Variable errno gesetzt hat, in den stderr-Stream (normalerweise der Bildschirm).

Zuerst wird das Argument s ausgegeben, dann folgt ein Doppelpunkt und die zum aktuellen Inhalt von errno gehörende Meldung. Zuletzt wird ein Zeilenvorschub ausgegeben. Üblicherweise wird der Programm-Dateiname als Parameter s übergeben.

Auf das Array der Fehlermeldungen wird über die globale Variable _sys_errlist zugegriffen. Der Wert der globalen Variablen errno kann als Index für das Array benutzt werden, um den zur Fehlernummer gehörenden String zu finden. Keiner der Strings enthält ein Zeilenvorschubzeichen (\n).

Die globale Variable _sys_nerr enthält die Anzahl der Einträge im Array.

Folgende Meldungen werden von perror erzeugt:

Meldungen unter Win 16 und Win 32

Arg list too big

Attempted to remove current directory

Bad address

Bad file number

Block device required

Broken pipe

Cross-device link

Error 0

Exec format error

Executable file in use

File already exists

File too large

Illegal seek

Inappropriate I/O control operation

Input/output error

Interrupted function call

Invalid access code

Invalid argument Resource busy

Invalid dataResource temporarily unavailable

Invalid environment

Invalid format

Invalid function number

Invalid memory block address

Is a directory

Math argument

Memory arena trashed

Name too long

No child processes

No more files

No space left on device

No such device

No such device or address

No such file or directory

No such process

Not a directory

Not enough memory

Not same device

Operation not permitted

Path not found

Permission denied

Possible deadlock

Read-only file system

Resource busy

Resource temporarily unavailable

Result too large

Too many links

Too many open files

Meldungen nur unter Win 32

Hinweis: In Win32- oder Win32s-GUI-Anwendungen muß stderr umgelenkt werden.

Bad address

Block device required

Broken pipe

Executable file in use

File too large

Illegal seek

Inappropriate I/O control

Input/output error

Interrupted function call

Is a directory

Name too long

No child processes

No space left on device

No such device or address

No such process

Not a directory

Operation not permitted

Possible deadlock

Read-only file system

Resource busy

Resource temporarily unavailable

Too many links


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	+	+	+


_pipe

Siehe auch	Beispiel	Portabilität

Syntax

#include <fcntl.h>

#include<io.h>

int _pipe(int *handles, unsigned int size, int mode);

Beschreibung

Erzeugt eine Pipe für Lese-/Schreibzugriffe.

Die Funktion _pipe erzeugt eine unbenannte Pipe für den Informationsaustausch zwischen Prozessen. Die Pipe wird sowohl zum Schreiben als auch zum Lesen geöffnet. Wie eine Plattendatei kann eine Pipe gelesen und beschrieben werden. Sie hat jedoch keinen Namen, und ihr ist auch kein permanenter Speicher zugeordnet. Die über eine Pipe ausgetauschten Daten existieren nur in einem Pufferspeicher, der vom Betriebssystem verwaltet wird.

Das Lese-Handle wird in handles[0], das Schreib-Handle in handles[1] zurückgegeben. Das Programm kann diese Handle bei folgenden Aufrufen von read, write, dup,, dup2, oder close. verwenden. Die Pipe wird gelöscht, wenn alle zu ihr gehörenden Handles geschlossen sind.

Der Parameter size bestimmt die Größe des internen Puffers. Der empfohlene Minimalwert beträgt 512 Bytes.

Der Übersetzungsmodus wird durch den Parameter mode wie folgt angegeben:

O_BINARY	Die Pipe wird im Binärmodus geöffnet.

O_TEXT	Die Pipe wird im Textmodus geöffnet.

Ist mode gleich 0, wird der Übersetzungsmodus durch die globale Variable _fmode bestimmt.

Rückgabewert

Bei erfolgreicher Ausführung liefert _pipe den Wert 0 zurück und übergibt die Pipe-Handles in handles[0] und handles[1].

Andernfalls wird -1 zurückgeliefert und die globale Variable errno erhält einen der folgenden Werte:

EMFILE	Zu viele offene Dateien.

ENOMEM	Nicht genug Platz im Hauptspeicher.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


poly, polyl

Beispiel	Portabilität

Syntax

#include <math.h>

double poly(double x, int degree, double coeffs[]);

long double polyl(long double x, int degree, long double coeffs[]);

Beschreibung

Erzeugt ein Polynom aus den angegebenen Argumenten.

poly bildet ein Polynom mit dem Grad degree über den Wert von x mit den Koeffizienten coeffs[degree], coeffs  [degree-1], ..., coeffs[0]. Ein Aufruf mit dem Wert n = 4 berechnet beispielsweise den folgenden Ausdruck:

polyl ist die long double-Version. Sie erwartet Argumente vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

poly und polyl liefern das Ergebnis der Polynom-Berechnung für den gegebenen Wert x.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
poly	+	+	+	+			+
polyl	+		+	+			+


_popen, _wpopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

FILE *_popen (const char *command, const char *mode);

FILE *_wpopen (const wchar_t *command, const wchar_t *mode);

Beschreibung

Erzeugt eine Pipe zum Kommandozeileninterpreter.

_popen erzeugt eine Pipe zum Kommandozeileninterpreter. Der Kommandozeileninterpreter wird asynchron ausgeführt. Übergeben wird die durch command angegebene Kommandozeile. Der String mode legt fest, ob die Pipe mit der Standardeingabe oder der Standardausgabe des Kommandozeileninterpreters verbunden werden soll und ob sie im Binär- oder im Textmodus geöffnet werden soll.

Der String mode kann einen der folgenden Werte enthalten:

Wert	Beschreibung

rt	Lesen aus Standardausgabe des untergeordneten Befehls (Textmodus)

fb	Lesen aus Standardausgabe des untergeordneten Befehls (Binärmodus)

wt	Schreiben in Standardeingabe des untergeordneten Befehls (Textmodus)

wb	Schreiben in Standardeingabe des untergeordneten Befehls (Binärmodus)

Das abschließende t bzw. b ist optional. Wird es weggelassen, so bestimmt die globale Variable _fmode den Übersetzungsmodus.

Mit Hilfe der Funktion _pclose können Sie die Pipe schließen und erhalten den vom ausgeführten Befehl zurückgelieferten Wert.

Rückgabewert

Bei fehlerfreier Ausführung liefert _popen einen Zeiger vom Typ FILE, mit dem, abhängig vom Inhalt von mode, aus der Standardeingabe des Befehls gelesen bzw. in die Standardausgabe geschrieben werden kann.

Im Fehlerfall liefert _popen NULL zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


pow, powl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double pow(double x, double y);

long double powl(long double x, long double y);

Beschreibung

 Liefert das Ergebnis der Berechnung x hoch y zurück.

powl ist die long double-Version. Sie erwartet Argumente vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

Bei fehlerfreier Ausführung liefern pow und powl das Ergebnis der Berechnung x hoch y zurück.

Falls sich die Argumente nicht innerhalb der zulässigen Grenzen halten, so wird ein Überlauf erzeugt oder das Ergebnis ist nicht berechenbar. Bei einem Überlauf liefert pow HUGE_VAL und powl _LHUGE_VAL. Die globale Variable errno wird in diesen Fällen auf den folgenden Wert gesetzt:

ERANGE	Ergebnis außerhalb des Rechenbereichs

Ist der Parameter x reellwertig und kleiner als 0, und ist y keine ganze Zahl, oder erfolgt ein Aufruf pow( 0,0 ), so erhält die globale Variable errno den Wert:

EDOM	Bereichsfehler

Die Fehlerbehandlung kann für diese Funktionen über die Routinen _matherr und _matherrl modifiziert werden.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
pow	+	+	+	+	+	+	+
powl	+		+	+			+


pow10, pow10l

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double pow10(int p);

long double pow10l(int p);

Beschreibung

Berechnet den Ausdruck 10 hoch p.

pow10l ist die long double-Version, die Funktion erwartet einen Parameter vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.

Rückgabewert

pow10 liefert im Erfolgsfall das Ergebnis der Berechnung von 10 hoch p. pow10l liefert ein Ergebnis vom Typ long double.

Das Resultat wird mit long double-Genauigkeit berechnet. Alle Argumente sind zulässig, können jedoch in manchen Fällen zu einem Überlauf oder Unterlauf führen.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
pow10	+	+	+	+			+
pow10l	+		+	+			+


printf, wprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int printf(const char *format[, argument, ...]);

int wprintf(const wchar_t *format[, argument, ...]);

Beschreibung

Schreibt formatierte Ausgaben in die Standardausgabe stdout.

Die Funktion printf:

übernimmt eine Reihe von Argumenten.

wendet auf jedes Argument eine Formatieranweisung an, die im durch den Parameter *format angegebenen Format-String enthalten ist.

gibt die formatierten Daten aus (auf den Bildschirm, in einen Stream, nach stdout oder in einen String).

Es müssen für das Format genügend Argumente vorhanden sein, da die Ergebnisse andernfalls unbestimmt und möglicherweise katastrophal sind. Überzählige Parameter in *format werden ignoriert.

Hinweis:	In Win32- oder Win32s-GUI-Anwendungen muß stdout umgelenkt werden.

Rückgabewert

printf liefert bei fehlerfreier Ausführung die Anzahl der ausgegebenen Bytes.

Im Falle eines Fehlers gibt printf EOF zurück.

Weitere Informationen über printf:

Unicode-Formatieranweisungen

Format-String

Formatieranweisungen

Konventionen für Formatieranweisungen

Flag-Zeichen

Größenmodifizierer

Präzisionsangaben

Typzeichen

Breitenangaben


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	+	+	+


printf - Format-String

Siehe auch

Der Format-String ist in jedem printf-Funktionsaufruf vorhanden und kontrolliert, wie die Funktion ihre Argumente konvertiert, formatiert und druckt.

Hinweis:	Für das Format müssen ausreichend viele Argumente vorliegen. Andernfalls kann man unvorhersagbare und eventuell auch katastrophale Ergebnisse erhalten. Überflüssige Argumente (mehr als die für das Format erforderlichen) werden ignoriert.

Der Format-String ist ein Zeichenfolge, die zwei Arten von Informationen enthält:

Normale Zeichen, die direkt in den Ausgabe-Stream geschrieben werden.

Konvertierungsanweisungen, die die Auswertung korrespondierender Argumente und ihre Formatierung bestimmen.

Einfache Zeichen werden direkt in den Ausgabe-Stream geschrieben.

Konvertierungsspezifikationen lesen die Argumente aus der Argumentliste und wenden die Formatierung auf die Zeichen an.


printf - Formatieranweisungen

Siehe auch

Die Formatieranweisungen für printf haben die folgende Syntax:

% [flags] [width] [.prec] [F|N|h|l|L] type_char

Jede Anweisung beginnt mit einem Prozentzeichen (%).

Auf das Prozentzeichen folgen (in der angegebenen Reihenfolge) weitere Komponenten.

Optionale Bestandteile des Format-Strings

In der folgenden Tabelle sind die optionalen Bestandteile einer Formatieranweisung und ihre Bedeutung aufgelistet:

Komponente	Optional/Obligator.	Wirkung

[flags]	(Optional)	Flag-Zeichen Ausrichtung der Ausgabe, Vorzeichen, Dezimalpunkt, folgende Nullen, oktale und hexadezimale Präfixe

[width]	(Optional)	Breitenangabe Minimalzahl der ausgegebenen Zeichen, notfalls mit Leerzeichen oder Nullen aufgefüllt

[prec]	(Optional)	Präzisionsangabe Maximalzahl der ausgegebenen Zeichen. Bei Integerwerten die Minimalzahl der ausgegenbenen Ziffern

[F|N|h|l|L]	(Optional)	Größenmodifizierer Verändern der Standardgröße des Arguments:

N	=	near-Zeiger

F	=	far-Zeiger

h	=	short int

l	=	long

L	=	long double

type_char	(Obligatorisch)	Konvertierungstyp-Zeichen


printf - Flag-Zeichen

Siehe auch

Sie können in jeder beliebigen Reihenfolge und Kombination auftreten.

Flag 	Bedeutung

-	Stellt das Ergebnis linksbündig dar und füllt von rechts mit Nullen auf. Wenn dieses Flag nicht gesetzt ist, wird das Ergebnis linksbündig dargestellt und von rechts mit Nullen oder Leerzeichen aufgefüllt.

+	Die Ergebnisse von vorzeichenbehafteten Konvertierungen beginnen immer mit einem Plus- oder Minuszeichen (+ oder -).

Leerzeichen	Bei nicht-negativen Werten beginnt die Ausgabe immer mit einem Leerzeichen und nicht mit einem Pluszeichen. Negative Werte beginnen weiterhin mit einem Minuszeichen.

#	Legt fest, daß arg konvertiert wird, wobei das Format alternative Form verwendet wird.

Hinweis:	Die Option (+) hat Vorrang vor der Option Leerzeichen(), wenn beide zusammen gesetzt sind.


printf - Alternative Formen für Konvertierungen

Siehe auch

Die Verwendung des Flags # zusammen mit einem Typzeichen hat auf das zu konvertierende Argument (arg) folgende Wirkungen:

Typzeichen	Wirkung von # auf arg

c s d iu	Keine Wirkung.

0	Eine 0 wird vorangestellt, wenn arg ungleich 0 ist.

x X	0x bzw. 0X wird vorangestellt.

e E f	Es wird immer ein Dezimalpunkt ausgegeben (normalerweise ist das bei diesen Formaten nur dann der Fall, wenn der Wert Nachkommastellen enthält).

g G	Wie bei e und E, jedoch werden abschließende Nullen nicht unterdrückt.


printf - Breitenangaben

Siehe auch

Die Breitenangabe legt die minimale Feldbreite für einen Ausgabewert fest.

Die Breite kann auf zwei Arten festgelegt werden:

direkt, innerhalb des Format-Strings

indirekt, über ein Sternchen (*).

Bei der Verwendung von * erwartet printf ein zusätzliches Argument, das in der Liste direkt vor dem auszugebenden Wert stehen und den Typ int haben muß.

Kleine oder nicht existierende Feldbreiten verursachen keine Feldverkürzungen. Wenn das Ergebnis einer Umwandlung weiter ist als die Feldbreite, dann wird das Feld ausgedehnt, um das Ergebnis der Umwandlung aufnehmen zu können.

Breitenangabe	Wirkung

n	printf gibt mindestens n Zeichen aus und stellt nötigenfalls Leerzeichen voran (Standard) bzw. fügt abschließende Leerzeichen an (Flag -).

0n	printf gibt mindestens n Zeichen aus und stellt nötigenfalls eine entsprechende Anzahl führender Nullen voran.

*	Die Breitenangabe steht in der Parameterliste direkt vor dem auszugebenden Wert.


printf - Präzisionsangaben

Siehe auch

Die printf -Präzisionsangaben bestimmen die maximale Anzahl der zu druckenden Zeichen (oder die miminale Anzahl von Integer-Ziffern).

Eine printf-Präzisionsangabe wird immer mit einem Dezimalpunkt (.) eingeleitet und so von einer eventuell vorangestellten Breitenangabe getrennt.

Dann wird wie bei [width]die Präzision auf eine von zwei Arten angegeben:

direkt, innerhalb des Format-Strings

indirekt, über ein Sternchen (*).

Wenn Sie ein * für die Präzisionsangabe verwenden, gibt das nächste Argument im Aufruf (als int behandelt) die Präzision an.

Wenn Sie Sternchen für die Breite, für die Präzision oder für beides verwenden, muß das Breitenargument unmittelbar hinter den Angaben folgen, danach das Präzisionsargument und schließlich das Argument für die zu konvertierenden Daten.

[.prec]	Wirkung auf die Ausgabe

(none)	Die Standardwerte werden verwendet:

=	1 für die Typen d,i,o,u,x und X

=	6 für die Typen e,E und f

=	alle signifikanten Stellen für die Typen g und G

=	Ausgabe bis zum ersten Nullzeichen für den Typ s

=	keine Auswirkungen auf den Typ c

.0	Standardwerte für die Typen d,i,o,u und x,

keine Ausgabe des Dezimalpunkts für die Typen e,E und f.

.n	Ausgabe von n Zeichen bzw. n signifikanten Dezimalstellen.

Falls der Ausgabewert mehr als n Zeichen umfaßt, wird die Ausgabe unter Umständen abhängig vom Typ des Zeichens abgeschnitten oder gerundet.

.*	Die Präzisionsangabe ist in der Parameterliste enthalten und muß dort vor dem auszugebenden Wert stehen.

Für ein Feld wird kein numerisches Zeichen ausgegeben (d.h., das Feld ist leer), wenn die folgenden Bedingungen zutreffen:

Eine Präzision wird explizit mit 0 angegeben.

Es handelt sich um ein Integerformat (d, i, o, u oder x).

Der auszugebende Wert ist 0.

Wirkung von [.prec] auf die Konvertierung

Typzeichen 	Wirkung von [.prec] (.n) auf die Konvertierung

d	Mindestens n Ziffern werden ausgegeben.

i	Wenn das eingegebene Argument weniger als n Zeichen enthält,

o	wird der ausgzugebende Wert von links mit Nullen aufgefüllt.

u	Wenn das eingegebene Argument mehr als n Zeichen enthält,

x	wird der auszugebende Wert nicht abgeschnitten.

X

e	n legt die Mindestanzahl der Stellen

E	nach dem Komma fest;

f	die letze Stelle wird gerundet.

g	n legt die Mindestanzahl signifikanter,

G	zu druckender Ziffern fest.

c	Die Ausgabe von n hat keine Wirkung.

s	Es werden höchstens n Zeichen ausgegeben.


printf - Typkonvertierungszeichen
printf - Typ-Konvertierungszeichen

Siehe auch

Die Angaben in dieser Tabelle basieren auf der Annahme, daß in der Formatieranweisungkeine Flag-Zeichen, Breitenangaben, Präzisionsangaben oder Größenmodifizierer enthalten waren

Hinweis:	Bestimmte Konventionen begleiten einige dieser Formatieranweisungen.

Typzeichen	Erwartete Eingabe	Ausgabeformat

Numerische Werte

d	Integer	signed int (dezimal)

i	Integer	signed int (dezimal)

o	Integer	unsigned int (oktal)

u	Integer	unsigned int (dezimal)

x	Integer	unsigned int (hexadezimal), Buchstaben a bis f

X	Integer	unsigned int (hexadezimal), Buchstaben A bis F

f	Gleitkomma	vorzeichenbehafteter Wert der Form [-]dddd.dddd.

e	Gleitkomma	vorzeichenbehafteter Wert der Form [-]d.dddd oder e[+/-]ddd

g	Gleitkomma	vorzeichenbehafteter Wert im e- oder f-Format. Präzision gibt die Anzahl signifikanter Ziffern an.

Abschließende Nullen und Dezimalpunkt werden nur ausgegeben, wenn es nötig ist.

E	Gleitkomma	dasselbe Format wie e, aber mit dem Zeichen E für den Exponenten

G	Gleitkomma	dasselbe Format wie e, aber mit dem Zeichen E für den Exponenten, wenn das Format e verwendet wird.

Zeichen

c	Zeichen	einzelnes Zeichen

s	String-Zeiger	Ausgabe bis zu einem NULL-Zeichen oder dem Erreichen der durch Präzision vorgegebenen Zeichenzahl

%	(nichts)	Ausgabe des Zeichens %

Zeiger

n	Zeiger auf int	Speichert an der Position, auf die das Eingabeargument zeigt, die Anzahl der bis jetzt ausgegebenen Zeichen.

p	Zeiger	Gibt das Eingabeargument als Zeiger in hexadezimaler Form aus (near-Zeiger als YYYY, far-Zeiger als XXXX:YYYY).

Unendlich große positive oder negative Gleitkommazahlen werden als +INF bzw. als -INF ausgegeben.

Eine "IEEE-Nichtzahl" wird als +NAN oder -NAN (Not-A-Number ) angegeben.


printf - Modifizierer für Eingabegrößen
printf - Größenmodifizierer

Siehe auch

Die folgenden Modifizierer legen fest, wie printf-Funktionen das nächste Argument arg[f] interpretieren.

Modifizierer 	Typ von arg 	arg wird interpretiert als

F	Zeiger (p, s,	Ein far-Zeiger

N	und n) 	Ein near-Zeiger (Hinweis: N kann mit keiner Konvertierung im Speichermodell huge verwendet werden.)

h	d i o u x X	Ein short int

l	d i o u x X	Ein long int

e E f g G	Ein double

L	e E f g G	Ein long double

Diese Modifizierer legen fest, wie alle printf-Funktionen den Datentyp des korrespondierenden Eingabearguments arg interpretieren.

Sowohl F als auch N reinterpretieren die Eingabevariable arg. Normalerweise ist arg für eine %p-, %s- oder %n-Konvertierung ein Zeiger mit der für das Speichermodell voreingestellten Größe.

h, l und L überschreiben die Standardgröße der numerischen Dateneingabeargumente. Weder h noch l beeinflussen Zeichentypen (c,s) oder Zeigertypen (p,n).


printf - Konventionen für Formatieranweisungen
printf - Konventionen bei Formatieranweisungen

Siehe auch

Bestimmte Konventionen begleiten einige der printf-Formatieranweisungen für die folgenden Konvertierungen:

- %e oder %E

- %f

- %g oder %G

- %x oder %X

Hinweis:	Unbegrenzte Gleitkommazahlen werden als +INF und -INF ausgegeben, eine "IEEE-Nichtzahl" als +NAN oder -NAN (Not-a-Number).


Konvertierung %e oder %E

Siehe auch

Das Argument wird zu dem folgenden Schema konvertiert:

[-] d.ddd...e[+/-]ddd

Dabei gilt:

Dem Dezimalpunkt geht eine Ziffer voran.

Die Zahl der Ziffern hinter dem Dezimalpunkt entspricht der Präzision.

Der Exponent enthält immer mindestens zwei Ziffern.


Konvertierung %f

Siehe auch

Das Argument wird in dezimale Notation nach folgendem Schema konvertiert:

[-] ddd.ddd...

Dabei entspricht die Zahl der Ziffern nach dem Dezimalpunkt der Präzision (sofern eine Präzision ungleich Null gegeben war).


Konvertierung %g oder %G

Siehe auch

Das Argument wird im Stil e, E oder f gedruckt. Dabei gibt die Präzision die Zahl der signifikanten Ziffern an.

Nachfolgende Nullen werden aus dem Ergebnis entfernt und ein Dezimalpunkt erscheint nur, wenn dies notwendig ist.

Das Argument wird im Stil e oder f gedruckt (mit einigen Einschänkungen), wenn g das Konvertierungszeichen ist. Der Stil e wird nur verwendet, wenn der aus der Konvertierung resultierende Exponent entweder größer als die Präzision oder kleiner als -4 ist.

Das Argument wird im Stil E gedruckt, wenn G das Konvertierungszeichen ist.


Konvertierung %x oder %X

Siehe auch

Bei x-Konvertierungen erscheinen die Buchstaben a, b, c, d, e und f in der Ausgabe.

Bei X-Konvertierungen erscheinen die Buchstaben A, B, C, D, E und F in der Ausgabe.


...printf-Funktionen

Die ...printf-Funktionen umfassen

fprintf	sendet die formatierte Ausgabe an einen Stream

printf	sendet die formatierte Ausgabe an stdout

sprintf	sendet die formatierte Ausgabe an einen String

vfprintf	sendet die formatierte Ausgabe unter Verwendung einer Argumentliste an einen Stream.

vprintf	sendet die formatierte Ausgabe unter Verwendung einer Argumentliste an stdout.

vsprintf	sendet die formatierte Ausgabe unter Verwendung einer Argumentliste an einen String.


putc, putwc

Siehe auch	Portabilität

Syntax

#include <stdio.h>

int putc(int c, FILE *stream);

wint_t putwc(wint_t c, FILE *stream);

Beschreibung

Schreibt ein Zeichen in einen Stream.

Das Makro putc schreibt das Zeichen c in den durch stream angegebenen Stream.

Rückgabewert

putc liefert bei fehlerfreier Ausführung das übergebene Zeichen c zurück.

Im Fehlerfall wird der Wert EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


putch

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int putch(int c);

Beschreibung

Gibt ein Zeichen auf den Bildschirm aus.

putch gibt das Zeichen c auf den Bildschirm in das aktuelle Textfenster aus. Sie ist eine Funktion für den Textmodus und ermöglicht die direkte Ausgabe an die Konsole. Eine Umsetzung von Zeilenvorschubzeichen (\n) in CR/LF-Zeichenpaare nimmt putch nicht vor.

Abhängig vom Wert der globalen Variablen _directvideo wird der String entweder direkt in den Bildschirmspeicher geschrieben oder über den Umweg eines BIOS-Aufrufs ausgegeben.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

putch liefert bei fehlerfreier Ausführung das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


putchar, putwchar

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int putchar(int c);

wint_t putwchar(wint_t c);

Beschreibung

 putchar(c) ist ein Makro und als putc(c, stdout) definiert.

Hinweis:	In Win32- oder Win32s-GUI-Anwendungen muß stdout umgelenkt werden.

Rückgabewert

putchar liefert bei fehlerfreier Ausführung das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+ 	+	+	+	+	+


putenv, _wputenv

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int putenv(const char *name);

int _wputenv(const wchar_t *name);

Beschreibung

Erweitert die aktuelle Umgebung um einen String.

putenv übernimmt den String name und fügt ihn in die Umgebung des aktuellen Prozesses ein. Beispiel:

putenv("PATH=C:\\BC");

Mit putenv kann auch eine vorhandene Variable geändert oder gelöscht werden. Unter DOS und OS/2 muß name in Großbuchstaben angegeben werden. Unter anderen Betriebssystemen können Groß- und Kleinbuchstaben verwendet werden. Das Gleichheitszeichen (=) darf nicht in name enthalten sein. Eine Angabe der Form name= (ohne Zeichenfolge auf der rechten Seite) löscht die Umgebungsvariable.

putenv kann nur die Umgebung des laufenden Programms verändern. Nach dem Programmende ist wieder die ursprüngliche Umgebung gültig. Die Umgebung des aktuellen Prozesses wird einschließlich aller mit putenv durchgeführten Änderungen an untergeordnete Prozesse übergeben.

Es dürfen nur statische oder globale Strings an putenv übergeben werden. Wird ein lokaler oder dynamischer String an putenv übergeben und benutzt, nachdem der Speicher des Strings freigegeben wurde, so kann dies zu unvorhersehbaren Ergebnissen führen.

Rückgabewert

putenv liefert bei fehlerfreier Ausführung den Wert 0, andernfalls -1 zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


puts, _putws

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int puts(const char *s);

int _putws(const wchar_t *s);

Beschreibung

Schreibt einen String in stdout.

puts schreibt den nullterminierten String s in stdout und beendet die Ausgabe mit einem Zeilenvorschubzeichen.

Hinweis:	In Win32- oder Win32s-GUI-Anwendungen muß stdout umgelenkt werden.

Rückgabewert

Bei fehlerfreier Ausführung liefert die Funktion einen nicht-negativen Wert zurück. Im Fehlerfall ist der Rückgabewert EOF.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	 	+


puttext

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int puttext(int left, int top, int right, int bottom, void *source);

Beschreibung

Kopiert Text aus dem Speicher in den Textbildschirm.

puttext schreibt den Inhalt des durch source bezeichneten Speicherbereichs in einen rechteckigen Ausschnitt des Textbildschirms. Der Ausschnitt wird durch die Parameter left, top, right und bottom festgelegt.

Die Funktion arbeitet mit absoluten Bildschirmkoordinaten. Die obere linke Ecke des Textbildschirms hat die Koordinaten (1,1).

puttext schreibt den Inhalt des angegebenen Speicherbereichs in sequentieller Reihenfolge in das definierte Rechteck von links nach rechts und von oben nach unten.

Jede Bildschirmposition benötigt zwei Speicher-Bytes. Das erste repräsentiert das dargestellte Zeichen, das zweite enthält das Video-Attribut dieser Bildschirmposition. Der für ein Rechteck mit w Spalten und h Zeilen benötigte Speicherplatz berechnet sich daher zu:

Bytes = (h Zeilen) x (w Spalten) x 2

puttext funktioniert nur im Textmodus und schreibt direkt in den Bildschirmspeicher.

Hinweis:	Diese Funktion darf in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

Rückgabewert

Bei fehlerfreier Ausführung wird ein Wert ungleich Null zurückgeliefert. Ein Rückgabewert von 0 zeigt einen Fehler an (zum Beispiel Koordinaten außerhalb des Bildschirms).


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_putw

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _putw(int w, FILE *stream);

Beschreibung

Schreibt einen Integer in einem Stream.

_putw schreibt den Integer w in den Stream stream. Eine spezielle Anordnung in der Datei wird von der Funktion weder verursacht noch erwartet.

Rückgabewert

_putw liefert bei fehlerfreier Ausführung den übergebenen Integer w, im Fehlerfall den Wert EOF zurück. Da EOF einen gültigen Integerwert darstellt, sollte nach putw ein expliziter Test mit ferror durchgeführt werden.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


qsort

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

Beschreibung

Sortiert mit Hilfe des Quicksort-Algorithmus.

qsort ist die Implementierung der 3-Median-Variante des Quicksort-Algorithmus zum Sortieren von Array-Elementen. qsort ruft dazu die vom Benutzer definierte Vergleichsfunktion fcmp wiederholt auf.

base	zeigt auf das erste Element (Index 0) des zu sortierenden Arrays;

nelem	ist die Anzahl der zu sortierenden Elemente;

width	gibt die Größe jedes Elements (in Bytes) an.

Die Vergleichsfunktion fcmp muß mit der _USERENTRY-Aufrufskonvention verwendet werden.

fcmp übernimmt die beiden Argumente elem1 und elem2. Beide sind Zeiger auf Elemente des Arrays. Die Vergleichsfunktion vergleicht die beiden Elemente (*elem1 und *elem2) und liefert einen Integerwert als Ergebnis zurück:

*elem1 <  *elem2   Rückgabewert < 0

*elem1 ==  *elem2   Rückgabewert = 0

*elem1 >  *elem2   Rückgabewert > 0

Für den Vergleich bedeutet das Kleiner-als-Symbol (<), daß in der Sortierung das links stehende Element vor dem rechts stehenden erscheinen soll. Analog bedeutet das Größer-als-Symbol (>), daß in der Sortierung das links stehende Element nach dem rechts stehenden erscheinen soll.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


raise

Siehe auch	Beispiel	Portabilität

Syntax

#include <signal.h>

int raise(int sig);

Beschreibung

Sendet ein Software-Signal zum ausführenden Programm.

Mit der Funktion raise lassen sich Software-Signale vom Typ sig an das Programm senden. Wenn das Programm einen Signal-Handler für den durch sig angegebenen Signaltyp installiert hat, wird dieser Handler ausgeführt. Wenn kein Handler installiert ist, wird die Standardaktion für den jeweiligen Signaltyp ausgeführt.

Die gegenwärtig in signal.h definierten Signaltypen und Standardaktionen sind:

Signal	Bedeutung

SIGABRT	Unnormales Programmende

SIGFPE	Gleitkommafehler

SIGILL	Illegaler Befehl

SIGINT	[Strg][C]-Interrupt

SIGSEGV	Ungültiger Speicherzugriff

SIGTERM	Anforderung nach Programmbeendigung

SIGUSR1	Benutzerdefiniertes Signal

SIGUSR2	Benutzerdefiniertes Signal

SIGUSR3	Benutzerdefiniertes Signal

SIGBREAK	[Strg][Untbr]-Interrupt

Hinweis:	Der Signaltyp SIGABRT wird vom C++Builder normalerweise nicht erzeugt, kann jedoch durch abort, raise oder auch durch unbehandelte Exceptions ausgelöst werden.

Rückgabewert

raise liefert bei fehlerfreier Ausführung den Wert 0, andernfalls einen Wert ungleich Null zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


rand

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int rand(void);

Beschreibung

Zufallszahlengenerator.

rand verwendet ein multiplikatives Kongruenzverfahren (Multiplikation mit anschließender Modulo-Operation), um Pseudo-Zufallszahlen im Bereich von 0 bis RAND_MAX zu erzeugen. Die Periode des Zufallszahlengenerators beträgt 232. Die symbolische Konstante RAND_MAX ist in stdlib.h definiert.

Rückgabewert

rand liefert die erzeugte Pseudo-Zufallszahl zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


random

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int random(int num);

Beschreibung

Zufallszahlengenerator.

random liefert eine Zufallszahl im Bereich von 0 bis (num-1) zurück. random(num) ist ein Makro, definiert in stdlib.h. Sowohl num als auch die zurückgelieferte Zufallszahl sind Integerwerte.

Rückgabewert

random liefert einen Zahl zwischen 0 und (num-1) zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


randomize

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

#include <time.h>

void randomize(void);

Beschreibung

Initialisiert den Zufallszahlengenerator.

randomize initialisiert den Zufallszahlengenerator mit einem Zufallswert.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


read

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int read(int handle, void *buf, unsigned len);

Beschreibung

Liest aus einer Datei.

read liest len Bytes aus der durch handle bezeichneten Datei in den durch buf angegebenen Speicherbereich.

Wird die Datei im Textmodus geöffnet, dann entfernt read Wagenrücklaufzeichen und interpretiert das Zeichen [Strg][Z] als Dateiende.

handle ist das über einen Aufruf von creat, open, dup oder dup2 erhaltene Datei-Handle.

Bei Plattendateien beginnt der Lesevorgang ab der aktuellen Position des Dateizeigers. Nach Beendigung des Lesevorgangs wird der Dateizeiger um die Anzahl der gelesenen Bytes erhöht. Bei Gerätedateien liest read direkt vom entsprechenden Gerät.

read kann maximal UINT_MAX-1 Bytes lesen, da UINT_MAX selbst dem Wert -1 und damit dem Fehlerindikator entspricht. UINT_MAX ist in limits.h definiert.

Rückgabewert

Bei fehlerfreier Ausführung liefert read die Anzahl der in den Puffer gelesenen Bytes als Integerwert zurück. Wenn die Datei im Textmodus geöffnet wurde, werden Wagenrückläufe und [Strg][Z] nicht mitgezählt.

Wenn das Dateiende erreicht bzw. überschritten wurde, ist der Rückgabewert 0. Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EACCES	Zugriff nicht gestattet

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


readdir, wreaddir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

struct wdirent *wreaddir(wDIR *dirp)

Beschreibung

Liest den aktuellen Eintrag aus einem Verzeichnis-Stream.

readdir ist unter UNIX auf POSIX-Systemen verfügbar.

Die Funktion liest den aktuellen Verzeichniseintrag aus dem durch dirp bezeichneten Verzeichnis-Stream. Der Verzeichnis-Stream wird auf den nächsten Eintrag gesetzt.

readdir liefert einen Zeiger auf eine Struktur des Typs dirent zurück. Bei jedem neuen Aufruf von readdir für den gleichen Verzeichnis-Stream wird diese Struktur überschrieben. Die Struktur wird bei einem Aufruf von readdir auf einen anderen Verzeichnis-Stream nicht überschrieben.

Die in dirent.h definierte Struktur des Typs dirent entspricht einem einzelnen Verzeichniseintrag. Sie enthält mehrere Elemente, von denen der Programmierer aber nur auf das Folgende zugreifen kann:

char d_name[];

Das Zeichenarray d_name enthält den nullterminierten Dateinamen für den aktuellen Verzeichniseintrag. Die Größe dieses Array ist unbestimmt. Sie können die Länge des Dateinamens mit der Funktion strlen ermitteln.

Zurückgeliefert werden alle gültigen Verzeichniseinträge einschließlich Unterverzeichnissen, "."- und ".."-Einträgen, Systemdateien, verborgenen Dateien und Datenträgernamen. Unbenutzte oder gelöschte Verzeichniseinträge werden nicht zurückgeliefert.

Verzeichniseinträge können zwar während des Lesens eines Verzeichnis-Streams erstellt oder gelöscht werden, es ist jedoch nicht sicher, ob readdir die betreffenden Einträge zurückliefert. Um sicherzustellen, daß readdir den aktuellen Status des Verzeichnisses zurückliefert, muß der Verzeichnis-Stream mit rewinddir auf den ersten Eintrag zurückgesetzt oder das Verzeichnis mit opendir neu geöffnet werden.

Die Funktion wreaddir ist die Unicode-Version von readdir. Sie benutzt die Struktur wdirent, stimmt aber sonst mit readdir überein.

Rückgabewert

Bei fehlerfreier Ausführung liefert readdir einen Zeiger auf den aktuellen Verzeichniseintrag zurück.

readdir gibt NULL zurück, wenn das Verzeichnisende erreicht wird oder dirp auf keinen offenen Verzeichnis-Stream zeigt.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


realloc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void *realloc(void *block, size_t size);

Beschreibung

Ändert die Größe eines reservierten Blocks im Hauptspeicher.

realloc verändert die Größe eines zuvor reservierten Speicherblocks auf size Bytes. Enthält size den Wert NULL, so wird der Speicherblock freigegeben und NULL zurückgeliefert. block muß auf die Startadresse eines Speicherblocks zeigen, der zuvor mit einem Aufruf von malloc, calloc oder realloc ermittelt wurde. Wenn block ein NULL-Zeiger ist, verhält sich realloc wie malloc.

realloc ändert die Größe des reservierten Speicherblocks und kopiert dazu den Blockinhalt an eine neue Adresse, falls nötig.

Rückgabewert

realloc gibt die neue Adresse des Speicherblocks zurück, die von der bisherigen Adresse abweichen kann.

Ist die Größenänderung nicht möglich, gibt realloc NULL zurück.

Falls der Wert von size 0 ist, wird der Speicherblock freigegeben und realloc gibt NULL zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


remove, _wremove

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int remove(const char *filename);

int _wremove(const wchar_t *filename);

Beschreibung

Löscht eine Datei.

remove löscht die durch filename angegebene Datei. Das Makro remove wird dabei in einen Aufruf von unlink umgesetzt. Wenn die Datei offen ist, müssen Sie sie erst schließen, bevor Sie sie mit remove löschen können.

Der Dateiname kann einen vollständigen Pfad enthalten.

Rückgabewert

Bei fehlerfreier Ausführung liefert remove den Wert 0 zurück. Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


rename, _wrename

Beispiel	Portabilität

Syntax

#include <stdio.h>

int rename(const char *oldname, const char *newname);

int _wrename(const wchar_t *oldname, const wchar_t *newname);

Beschreibung

Ändert den Namen einer Datei.

rename ändert den Namen der Datei oldname in newname. Beide Namen können vollständige Pfade und/oder Laufwerksbezeichner enthalten. Die Angabe unterschiedlicher Laufwerke in oldname und newname ist nicht zulässig.

Die in oldname und newname angegebenen Verzeichnisse müssen nicht übereinstimmen. Es ist daher mit rename möglich, Dateien von einem Verzeichnis in ein anderes zu verlagern. Die Angabe von Jokerzeichen ist nicht zulässig.

Ist eine der Dateien in irgendeinem Prozeß geöffnet, so kehrt rename mit einem Fehler (EEXIST) zurück.

Rückgabewert

Bei fehlerfreier Ausführung liefert rename den Wert 0 zurück.

Ansonsten (Datei konnte nicht umbenannt werden) ist das Funktionsergebnis -1 und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

ENOENT	Pfad/Datei nicht gefunden

ENOTSAM	Ziel- und Quell-Laufwerk sind nicht identisch


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


rewind

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

void rewind(FILE *stream);

Beschreibung

Setzt einen Dateizeiger auf den Stream-Anfang.

rewind ist äquivalent zu fseek(stream, 0L, SEEK_SET), löscht aber nicht nur das Dateiende-Flag (wie rewind), sondern auch eventuell gesetzte Fehler-Flags.

In Dateien, die für Lese- und Schreibzugriffe geöffnet worden sind, kann nach rewind zwischen "Lesen" und "Schreiben" gewechselt werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


rewinddir, wrewinddir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dirent.h>

void rewinddir(DIR *dirp);

void wrewinddir(wDIR *dirp);

Beschreibung

Setzt einen Verzeichnis-Stream auf den ersten Eintrag zurück.

rewinddir ist unter UNIX auf POSIX-Systemen verfügbar.

Die Funktion setzt den Verzeichnis-Stream dirp auf den ersten Eintrag im Verzeichnis zurück. rewinddir stellt sicher, daß der Verzeichnis-Stream den aktuellen Status der Einträge widerspiegelt: Es werden alle Einträge berücksichtigt, die seit dem letzten Aufruf von opendir oder rewinddir für diesen Verzeichnis-Stream erzeugt oder gelöscht wurden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_rmdir, _wrmdir

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

int _rmdir(const char *path);

int _wrmdir(const wchar_t *path);

Beschreibung

Löscht ein Verzeichnis.

_rmdir löscht das durch path angegebene Verzeichnis und kann nur angewendet werden, wenn dieses Verzeichnis

keine Einträge enthält,

nicht das aktuelle Arbeitsverzeichnis ist,

nicht das Stammverzeichnis ist.

Rückgabewert

_rmdir liefert 0 zurück, wenn das Verzeichnis erfolgreich gelöscht wurde. Im Fehlerfall ist der Rückgabewert -1 und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

ENOENT	Pfad nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_rmtmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int _rmtmp(void);

Beschreibung

Löscht temporäre Dateien.

_rmtmp schließt und löscht alle offenen, temporären Datei-Streams, die vorher mit tmpfile erzeugt wurden. Das aktuelle Verzeichnis muß dasselbe sein, in dem die Dateien erzeugt wurden, da die Dateien andernfalls nicht gelöscht werden.

Rückgabewert

_rmtmp liefert die Anzahl der geschlossenen und gelöschten Dateien zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_rotl, _rotr

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

unsigned short _rotl(unsigned short value, int count);

unsigned short _rotr(unsigned short value, int count);

Beschreibung

 Rotiert einen unsigned short-Wert bitweise nach links oder rechts.

_rotl rotiert den als value übergebenen Integerwert um count Bitpositionen nach links.

_rotr rotiert den als value übergebenen Integerwert um count Bitpositionen nach rechts.

Rückgabewert

Die Funktion liefert den rotierten Integerwert zurück:

_rotl liefert den um count Bits nach links rotierten Wert von value zurück.

_rotr liefert den um count Bits nach rechts rotierten Wert von value zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_rtl_chmod, _wrtl_chmod

Siehe auch	Beispiel	Portabilität

Syntax

#include <dos.h>

#include <io.h>

int _rtl_chmod(const char *path, int func [, int attrib]);

Beschreibung

Liest bzw. ändert die DOS-Dateiattribute.

Hinweis:	Diese Funktion ersetzt die Funktion _chmod, die nicht mehr benötigt wird.

Über _rtl_chmod können die Attribute der durch path angegebenen Datei entweder gelesen (func == 0) oder auf den Wert von attrib gesetzt werden (func == 1).

Für den Parameter attrib sind die folgenden Konstanten in dos.h definiert:

FA_RDONLY	Nur Lesen

FA_HIDDEN	Verborgen

FA_SYSTEM	Systemdatei

FA_LABEL	Volume-Label (Datenträgername)

FA_DIREC	Verzeichnis

FA_ARCH	Archiv

Rückgabewert

Bei fehlerfreier Ausführung liefert _rtl_chmod das gelesene bzw. neu gesetzte Attribut.

Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EACCES	Zugriff nicht erlaubt

ENOENT	Erlaubnis verweigert


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


_rtl_close

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _rtl_close(int handle);

Beschreibung

Schließt eine Datei.

Hinweis:	Diese Funktion ersetzt die Funktion _close, die nicht mehr verwendet wird.

_rtl_close schließt die durch handle bezeichnete Datei. Ein Handle wird durch einen Aufruf von creat, creatnew, creattemp, dup, dup2, open, _rtl_creat oder _rtl_open einer Datei zugeordnet.

Diese Funktion schreibt kein ^Z [Ctrl][Z] als Dateiende-Zeichen. Falls Sie eine Datei mit ^Z abschließen wollen, müssen Sie dieses Zeichen explizit ausgeben.

Rückgabewert

_rtl_close liefert den Wert 0 zurück, wenn die Operation fehlerfrei ausgeführt werden konnte.-

Für den Fehlerfall, daß handle keine gültige, offene Datei bezeichnet, liefert _rtl_close den Wert -1 zurück, und die globale Variable errno erhält den Wert

EBADF	Ungültiges Datei-Handle.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


_rtl_creat, _wrtl_creat

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _rtl_creat(const char *path, int attrib);

int _wrtl_creat(const wchar_t *path, int attrib);

Beschreibung

Erzeugt eine neue Datei oder überschreibt eine bereits vorhandene Datei.

Hinweis:	Diese Funktion ersetzt die Funktion _creat, die nicht mehr verwendet wird.

Die Funktion _rtl_creat öffnet die durch path bezeichnete Datei grundsätzlich im binären Modus. Nach einer fehlerfreien Öffnung bzw. Erzeugung zeigt der Dateizeiger auf das erste Byte der Datei. Die Datei wird für Lese- und Schreibzugriffe geöffnet.

Wenn die Datei bereits existiert, wird sie auf eine Länge von 0 Bytes gekürzt (d.h. der Inhalt wird gelöscht).

Der Parameter attrib enthält eine ODER-Kombination aus einer oder mehreren der folgenden in dos.h definierten Konstanten:

FA_RDONLY	Nur-Lesen-Attribut

FA_HIDDEN	Verborgen

FA_SYSTEM	Systemdatei

Rückgabewert

Bei fehlerfreier Ausführung liefert _rtl_creat das neue Datei-Handle (einen nicht-negativen Integerwert) zurück.

Im Fehlerfall wird der Wert -1 zurückgegeben und die globale Variable errno auf einen der folgenden Werte gesetzt:

EACCES	Zugriff nicht erlaubt

EMFILE	Zu viele offene Dateien

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


_rtl_heapwalk

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

int _rtl_heapwalk(_HEAPINFO *hi);

Beschreibung

Durchläuft den Heap Knoten für Knoten.

Hinweis:	Diese Funktion ersetzt die Funktion _heapwalk, die nicht mehr verwendet wird.

Die Funktion geht davon aus, daß der Heap gültig ist (überprüfen Sie dies vorher mit _heapchk ). Mit dem letzten Block wird _HEAPOK zurückgeliefert. Bei einem erneuten Aufruf von _rtl_heapwalk ist das Ergebnis _HEAPEND.

Die Funktion _rtl_heapwalk übernimmt einen Zeiger auf eine Struktur vom Typ _HEAPINFO (deklariert in malloc.h).

Setzen Sie das Feld hi._pentry beim ersten Aufruf der Funktion auf NULL. Nach der Rückkehr von _rtl_heapwalk enthält hi._pentry die Adresse des ersten Blocks.

hi._size	enthält die Größe des Blocks in Bytes.

hi._useflag	ist ein Flag, das auf _USEDENTRY gesetzt wird, wenn der Block zur Zeit benutzt wird. Bei einem freien Block enthält hi._useflag den Wert _FREEENTRY.

Rückgabewert

Einer der folgenden Werte wird zurückgeliefert:

_HEAPBADNODE	Ein fehlerhafter Block wurde entdeckt

_HEAPBADPTR	Das Feld _pentry zeigt nicht auf einen gültigen Heap-Block

_HEAPEMPTY	Es gibt keinen Heap

_HEAPEND	Das Ende des Heap wurde erreicht

_HEAPOK	Der _heapinfo-Block enthält gültige Daten über den nächsten Block


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


_rtl_open, _wrtl_open

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _rtl_open(const char *filename, int oflags);

int _wrtl_open(const wchar_t *path, int oflags);

Beschreibung

Öffnet eine Datei zum Lesen oder Schreiben.

Hinweis:	Diese Funktion ersetzt die Funktion _open, die nicht mehr verwendet wird.

_rtl_open öffnet die durch filename angegebene Datei entsprechend dem Parameter oflags für Lese- und/oder Schreibzugriffe. Die Datei wird stets im Binärmodus geöffnet.

oflags verwendet die Flags der folgenden beiden Listen. Aus der ersten Liste darf (und muß) genau ein Flag verwendet werden. Die übrigen Flags können in jeder logischen Kombination benutzt werden.

Liste 1: Lese-/Schreib-Flags

O_RDONLY	Nur Lesen

O_WRONLY	Nur Schreiben

O_RDWR	Lesen und Schreiben

Die folgenden zusätzlichen Werte können durch eine ODER-Operation mit in oflags aufgenommen werden:

Liste 2: Weitere Zugriffs-Flags

O_NOINHERIT	Datei wird nicht an untergeordnete Prozesse vererbt.

SH_COMPAT	Ermöglicht weitere Zugriffe auf diese Datei mit SH_COMPAT. Sie können einen Zugriff anfordern, indem Sie SH_COMPAT durch den ODER-Operator mit einem anderen Flag verknüpfen (erlaubt ist z. B. die Verknüpfung SH_COMPAT | SH_DENWR). Wurde die Datei bereits in einem gemeinsamen Zugriffsmodus geöffnet, ergibt der Aufruf einen Fehler.

SH_DENYRW	Ermöglicht den Zugriff auf die Datei nur über das aktuelle Handle.

SH_DENYWR	Über andere Handles kann diese Datei nur gelesen werden.

SH_DENYRD	Über andere Handles kann diese Datei nur beschrieben werden.

SH_DENYNONE	Sämtliche Zugriffe auf diese Datei sind erlaubt, jedoch nicht solche mit
SH_COMPAT.

Hinweis:	Diese symbolischen Konstanten sind in fcntl.h und share.h.definiert.

In einem Aufruf von _rtl_open kann jeweils nur eine der SH_DENYxxx-Konstanten angegeben werden. Diese Konstanten gelten zusätzlich zu bereits bestehenden Sperrungen der Datei.

Die maximal mögliche Anzahl gleichzeitig offener Dateien wird durch HANDLE_MAX bestimmt.

Rückgabewert

Wenn die Datei fehlerfrei geöffnet werden konnte, liefert _rtl_open das Handle der Datei zurück (einen nicht-negativen Integerwert). Der Dateizeiger (markiert die aktuelle Position in der Datei) wird auf den Dateianfang gesetzt.

Im Fehlerfall liefert _rtl_open den Wert -1 zurück und setzt die globale Variable errno auf einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

EINVACC	Ungültiger Zugriffscode

EMFILE	Zu viele Dateien offen

ENOENT	Pfad oder Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


_rtl_read

Siehe auch	Beispiel	Portabilität

Syntax

#include <dos.h>

int _rtl_read(int handle, void *buf, unsigned len);

Beschreibung

Liest aus einer Datei.

Hinweis:	Diese Funktion ersetzt die Funktion _read, die nicht mehr verwendet wird.

_rtl_read liest len Bytes aus der durch handle bezeichneten Datei in den durch buf angegebenen Speicherbereich. Wurde die Datei im Textmodus geöffnet, dann entfernt _rtl_read keine CR-Zeichen.

handle ist das über einen Aufruf von creat, open, dup oder dup2 erhaltene Datei-Handle.

Bei Plattendateien beginnt der Lesevorgang an der aktuellen Position des Dateizeigers. Nach Beendigung des Lesevorgangs wird der Dateizeiger um die Anzahl der gelesenen Bytes erhöht. Bei Gerätedateien liest _rtl_read direkt vom entsprechenden Gerät.

_rtl_read kann maximal UINT_MAX-1 Bytes lesen, da UINT_MAX selbst dem Wert -1 und damit dem Fehlerindikator entspricht. Die Konstante UINT_MAX ist in limits.h definiert.

Rückgabewert

_rtl_read liefert bei fehlerfreier Ausführung entweder

die Anzahl der gelesenen Bytes als (positiven) Integerwert zurück oder

0 zurück und kennzeichnet damit das Dateiende.

Im Falle eines Fehlers liefert _rtl_read den Wert -1 zurück, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EACCES	Zugriff nicht gestattet

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


_rtl_write

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _rtl_write(int handle void *buf unsigned len);

Beschreibung

Schreibt in eine Datei

Hinweis:	Diese Funktion ersetzt die Funktion _write, die nicht mehr verwendet wird.

_rtl_write liest len Bytes ab der durch buf angegebenen Adresse aus dem Speicher und schreibt sie in die durch handle bezeichnete Datei.

Mit _rtl_write können maximal UINT_MAX-1 Bytes geschrieben werden, da UNIT_MAX dem Wert -1 entspricht, dem Fehlerindikator von _rtl_write. UINT_MAX ist in limits.h definiert. Zeilenvorschubzeichen LF werden nicht in die Zeichenfolge CR/LF umgesetzt, weil alle Dateien Binärdateien sind.

Ist die Anzahl der tatsächlich geschriebenen Bytes kleiner als die der benötigten, so ist dies ein Fehler und bedeutet wahrscheinlich, daß die Platte voll ist.

Bei Plattendateien schreibt _rtl_write ab der aktuellen Position des Dateizeigers, bei Gerätedateien wird direkt auf das jeweilige Gerät geschrieben.

Wenn die Datei mit O_APPEND ("anhängen") geöffnet wurde, wird der Dateizeiger nicht vor dem Schreiben der Daten auf EOF positioniert.

Rückgabewert

Die Funktion liefert die Anzahl der tatsächlich geschriebenen Bytes zurück.

Im Fehlerfall wird der Wert -1 zurückgeliefert und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+


scanf, wscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int scanf(const char *format[, address, ...]);

int wscanf(const wchar_t *format[, address, ...]);

Beschreibung

Liest und formatiert Eingabe aus dem Stream stdin.

Hinweis:	Bei Win32s- oder Win32-GUI-Anwendungen muß stdin umgelenkt werden.

Die Funktion scanf führt folgende Aktionen durch:

Sie liest zeichenweise eine Folge von Eingabefeldern.

Sie formatiert jedes Feld entsprechend einer korrespondierenden Formatierungsanweisung, die im Format-String *format übergeben wurde.

vsscanf liest und formatiert mit Hilfe einer Argumentliste die Eingabe von einem String.

Für jedes Eingabefeld muß je eine Formatierungsanweisung und eine Adresse existieren.

Die Funktion scanf kann mit dem Lesen eines Eingabefeldes oder mit dem gesamten Lesen vorzeitig abbrechen, ehe ein Feldendezeichen (Whitespace) erreicht wird. Die Gründe dafür sind in Wenn ...scanf-Funktionen abbrechen beschrieben.

ACHTUNG: scanf führt oft zu unerwünschten Ergebnissen, wenn Sie vom erwarteten Schema abweichen. Sie müssen scanf mitteilen, wie am Zeilenende verfahren werden soll.

Die Kombination aus gets oder fgets, gefolgt von sscanf, ist sicher und einfach und daher der Verwendung von scanf vorzuziehen.

Rückgabewert:

Bei fehlerfreier Ausführung: liefert die scanf-Funktion die Anzahl der Felder zurück, die erfolgreich gelesen, konvertiert und gespeichert wurden. Dieser Wert beinhaltet keine Felder, die zwar gelesen, jedoch nicht gespeichert wurden.

Im Falle eines Fehlers liefert scanf

0 zurück, wenn keine Felder gespeichert wurden und

EOF, wenn sccanf versucht, am Dateiende oder am Ende eines String zu lesen.

Weitere Informationen zu scanf

Unicode-Eingabeformatbezeichner

Argumenttypmodifikationen

Zuweisungsunterdrückung

Formatierungsanweisung

Konventionen für die Formatierungsanweisung

Format-String

Eingabefelder

Zeigergrößenmodifikationen

Typzeichen

Breitenangabe

Wenn ...scanf-Funktionen abbrechen


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	+	+	+


Der scanf-Format-String

Siehe auch

Der Format-String steuert die Art, wie jede ...scanf-Funktion die Eingabefelder liest, konvertiert und speichert.

Der Format-String ist ein Zeichenstring, der drei Arten von Objekten enthält:

Whitespace-Zeichen

normale Zeichen

Formatierungsanweisungen

Whitespace-Zeichen

Whitespace-Zeichen sind Leerzeichen, Tabulatorsprünge (\t) oder Neue-Zeile-Zeichen (\n).

Wenn eine ...scanf-Funktion im Format-String auf ein Whitespace-Zeichen trifft, werden alle aufeinanderfolgenden Whitespace-Zeichen bis zum nächsten normalen Zeichen gelesen, aber nicht gespeichert.

Angehängte Whitespace-Zeichen (einschließlich Neue-Zeile-Zeichen) werden erst gar nicht gelesen, sofern sie nicht explizit im Format-String angegeben sind.

Normale Zeichen

Normale Zeichen sind alle anderen ASCII-Zeichen außer dem Prozent-Zeichen (%).

Wenn eine ...scanf-Funktion auf ein normales Zeichen im Format-String trifft, wird das entsprechende normale Zeichen gelesen, aber nicht gespeichert.

Formatierungsanweisungen

Die Formatierungsanweisungen weisen die ...scanf-Funktionen an, Zeichen vom Eingabefeld zu lesen, in bestimmte Werte zu konvertieren und in der angegebenen Speicheradresse zu speichern.

Achtung:	Jede Formatierungsanweisung muß ein Adressenargument haben. Wenn mehr Formatierungsanweisungen als Adressen angegeben werden, kommt es zu unvorhersehbaren Ergebnissen.

Überzählige Adressenargumente werden ignoriert.


...scanf-Formatierungsanweisungen
scanf-Formatierungsanweisungen

Siehe auch

In ...scanf-Format-Strings haben Formatierungsanweisungen die folgende Form:

% [*] [width] [F|N] [h|l|L] type_char

Jede Formatierungsanweisung beginnt mit dem Prozentzeichen (%).

Nach dem Prozentzeichen % folgen in der untenstehenden Reihenfolge:

Komponente 	Optional/Obligatorisch	Funktion/Auswirkung

[*]	(Optional) 	Zeichen für Zuweisungsunterdrückung. Unterdrückt die Zuweisung des nächsten Eingabefeldes.

[width]	(Optional) 	Breitenangabe. Maximale Anzahl der zu lesenden Zeichen. Es können weniger Zeichen gelesen werden, wenn die ...scanf-Funktion auf ein Whitespace-Zeichen oder ein nicht auswertbares Zeichen trifft .

[F|N]	(Optional) 	Zeigergrößenmodifikation. Überschreibt die Standardgröße der Adresse:

N = near-Zeiger

F = far-Zeiger

[h|l|L]	(Optional) 	Argumenttypmodifikation. Überschreibt die Standardgröße der Adresse:

h	=	short int

l	=	long int, wenn type_char eine Integer-Konvertierung festlegt.

l	=	double, wenn type_char eine Gleitkommakonvertierung festlegt.

L	=	long double, (nur mit Gleitkommakonvertierung zulässig)

type_char	(Obligatorisch)	Typzeichen


Typzeichen

Siehe auch

Die Angaben in der folgenden Tabelle beruhen auf der Annahme, daß keine optionalen Zeichen, Anweisungen oder Modifikationen (*, Breite oder Größe) in der Formatierungsanweisung enthalten sind.

Hinweis:	Einige Formatierungsanweisungen erfordern die Einhaltung bestimmter Konventionen.

Typ 	Erwartete Eingabe	Argumenttyp

Zahlen

d	Dezimal Integer 	Zeiger auf int (int *arg)

D	Dezimal Integer 	Zeiger auf long (long *arg)

e,E	Gleitkomma 	Zeiger auf float (float *arg)

f	Gleitkomma 	Zeiger auf float (float *arg)

g,G	Gleitkomma 	Zeiger auf float (float *arg)

o	Oktal Integer 	Zeiger auf int (int *arg)

O	Oktal Integer 	Zeiger auf long (long *arg)

i	Dezimal, oktal oder 	Zeiger auf int (int *arg)

hexadezimal Integer

I	Dezimal, oktal, od. 	Zeiger auf long (long *arg)

hexadezimal Integer

u	Dezimal Integer vorzeichenlos 	Zeiger auf unsigned int (unsigned int *arg)

U	Dezimal Integer vorzeichenlos 	Zeiger auf unsigned long (unsigned long *arg)

x	Hexadezimal Integer 	Zeiger auf int (int *arg)

X	Hexadezimal Integer 	Zeiger auf int (int *arg)

Zeichen

s	Zeichen-String  	Zeiger auf Array mit chars (char arg[])

c	Zeichen	Zeiger auf char (char *arg), wenn eine Feldbreite zusammen mit dem Zeichen c (z.B. %5c) gegeben ist.

 	 	Zeiger auf Array mit W-Zeichen (char arg[W])

%	%-Zeichen	Keine Konvertierung; % wird gespeichert

Zeiger

n	Zeiger auf int (int *arg): Die Anzahl der erfolgreich gelesenen Zeichen (bis zu %n) wird in int gespeichert.

p	Hexadezimale Form  	Zeiger auf ein Objekt (far* or near*)

YYYY:ZZZZ oder ZZZZ	%p Standardkonvertierung, Zeigergröße abhängig vom Speichermodell


Eingabefelder für scanf-Functionen
Eingabefelder für scanf-Funktionen

Siehe auch

In einer ...scanf-Funktion sind die folgenden Zeichen als Eingabefelder definiert:

alle Zeichen bis zum nächsten Whitespace-Zeichen (ausschließlich)

alle Zeichen bis zum ersten Zeichen, das nicht unter der aktuellen Formatierungsanweisung konvertiert werden kann (z.B. 8 oder 9 im Oktal Format)

bis zu n Zeichen, wobei n die angegebene Feldbreite ist.


Zeichen für Zuweisungsunterdrückung

Siehe auch

Das Zeichen für die Zuweisungsunterdrückung ist ein Sternchen (*), nicht zu verwechseln mit dem Zeiger-Operator * von C.

Wenn in einer Formatierungsanweisung dem Stern ein Prozentzeichen (%) folgt, wird das nächste Eingabefeld gelesen, jedoch nicht dem nächsten Adressenargument zugewiesen.

Es wird davon ausgegangen, daß der Typ der unterdrückten Eingabedaten dem Typzeichen nach dem Stern entspricht.


Breitenangaben

Siehe auch

Die Breitenangabe (n), ein dezimaler Integer-Wert, gibt die maximale Anzahl von Zeichen an, die vom aktuellen Eingabefeld gelesen werden sollen.

Es werden bis zu n Zeichen gelesen, konvertiert und im Argument der aktuellen Adresse gespeichert.

Wenn das Eingabefeld weniger als n Zeichen enthält, liest die Funktion ...scanf alle Zeichen im Feld und fährt dann mit dem nächsten Feld und der nächsten Formatierungsanweisung fort.

Die Auswirkungen der Suche nach zeichenmäßiger Übereinstimmung und die Auswirkungen der unterdrückten Zuweisungen sind nicht exakt bestimmbar.

Wenn die Funktion ...scanf auf ein Whitespace-Zeichen oder ein nicht-konvertierbares Zeichen trifft, ehe sie "width" Zeichen gelesen hat,

werden die bis dahin gelesenen Zeichen gelesen, konvertiert und gespeichert, woraufhin

die nächste Formatierungsanweisung gesucht wird.

Ein nicht-konvertierbares Zeichen ist eines, das nicht im angegebenen Format konvertiert werden kann (8 oder 9 im oktalen Format; J oder K im hexadezimalen oder dezimalen Format usw.).


Zeigergrößen und Argumenttypmodifikationen

Siehe auch

Diese Modifikation bestimmt, wie ...scanf-Funktionen ein entsprechendes Adressenargument arg[f] interpretieren.

Zeigergrößenmodifikationen

Zeigergrößenmodifikationen überschreiben die vorgegebene oder deklarierte Größe von arg.

Modifikation	arg interpretiert als

F	far-Zeiger

N	near-Zeiger (nicht im Speichermodell huge)

Argumenttypmodifikationen

Argumenttypmodifikationen zeigen an, in welchem Typ die nachfolgenden Eingabedaten gelesen werden (h = short, l = long, L = long double).

Die Eingabedaten werden wie angegeben konvertiert, und das Argument für diese Eingabedaten sollte auf ein Objekt von entsprechender Größe zeigen.

Modifikation	Typ 	Wird konvertiert in

h	d i o u x	short int; in short-Objekt gespeichert

D I O U X 	(Keine Auswirkung)

e f c s n p 	(Keine Auswirkung)

l	d i o u x	long int; in long-Objekt gespeichert

e f g	double; in double-Objekt gespeichert

D I O U X	(Keine Auswirkung)

c s n p	(Keine Auswirkung)

L	e f g	long double; in long double-Objekt gespeichert

(alle anderen)  	(Keine Auswirkung)


Konventionen für die Formatierungsanweisung

Siehe auch

Einige ...scanf-Formatierungsanweisungen verlangen für die nachfolgend genannten Konvertierungen die Einhaltung bestimmter Konventionen:

Einzelnes Zeichen (%c)

Zeichen-Array (%[W]c)

String (%s)

Gleitkomma (%e, %E, %f, %g, und %G)

Vorzeichenlos (%d, %i, %o, %x, %D, %I, %O, %X, %c, %n)

Suchmengen (%[...], %[^...])


Konvertierung einzelner Zeichen (%c)

Siehe auch

Diese Angabe liest das nächste Zeichen einschließlich eines Whitespace-Zeichens.

Um ein Whitespace-Zeichen zu überspringen und das nächste normale Zeichen zu lesen, verwenden Sie: %1s.


Zeichen-Array-Konvertierung (%[W]c)

[W] = Breitenangabe

Das Argument der Adresse ist ein Zeiger auf ein Zeichen-Array (char arg[W]).

Das Array besteht aus W-Elementen.


String-Konvertierung (%s)

Siehe auch

Das Argument der Adresse ist ein Zeiger auf ein Zeichen-Array (char arg[]).

Das Array muß mindestens (n+1) Byte groß ein, wobei n = die Länge des Strings s (in Zeichen) ist.

Ein Leerzeichen oder Zeilenvorschub beendet das Eingabefeld.

Eine abschließende 0 wird automatisch an den String angehängt und als letztes Element im Array gespeichert.


Gleitkommakonvertierung (%e, %E, %f, %g, and %G)

Siehe auch

Gleitkommazahlen im Eingabefeld müssen dem folgenden generischen Format entsprechen:

[+/-] ddddddddd [.] dddd [E|e] [+/-] ddd

Dabei zeigen eckige Klammern an, daß das betreffende Element optional ist. ddd steht für eine Folge von Ziffern (dezimal, oktal oder hexadezimal).

+INF, -INF, +NAN, und -NAN werden als Gleitkommazahlen anerkannt. Das Vorzeichen (+ oder -) und die Großschreibung sind zwingend erforderlich.


Vorzeichenlose Konvertierung (%d, %i, %o, %x, %D, %I, %O, %X, %c, and %n)
Vorzeichenlose Konvertierung (%d, %i, %o, %x, %D, %I, %O, %X, %c und %n)

Siehe auch

Ein Zeiger auf ein unsigned Zeichen, einen unsigned Integerwert oder einen unsigned long-Wert kann immer verwendet werden, wenn ein Zeiger auf ein Zeichen, einen Integer- oder einen long-Wert erlaubt ist.


Suchmengenkonvertierung (%[search_set])

Siehe auch	Beispiel

Eine Menge von Zeichen in eckigen Klammern kann Zeichen des Typs s ersetzen.

Das Argument der Adresse ist ein Zeiger auf ein Array von Zeichen (char arg[]).

Diese Klammern schließen eine Menge von Zeichen ein, die eine Suchmenge von möglichen Zeichen für die Eingabe definieren.

Wenn das erste Zeichen in Klammern ein Caret (^) ist, wird die Suchmenge invertiert, so daß alle ASCII-Zeichen außer solchen in Klammern zulässig sind.

(Ein Caret wird normalerweise in die invertierte Suchmenge einbezogen, außer es wird explizit nach dem ersten Caret aufgelistet).

Das Eingabefeld ist ein String, der nicht durch ein Whitespace-Zeichen begrenzt ist. Die Funktion ...scanf liest das entsprechende Eingabefeld, bis sie das erste Zeichen erreicht, das nicht in der Suchmenge (oder in der invertierten Suchmenge) enthalten ist.

Regeln für Suchmengenbereiche:

1.Das Zeichen vor dem Bindestrich (-) muß lexikalisch vor dem darauffolgenden liegen.

2.	Der Bindestrich darf weder das erste noch das letzte Zeichen sein. (Wenn er an erster oder letzter Stelle steht, wird er als Trennzeichen und nicht als Bereichsbezeichnung betrachtet.)

3.	Die Zeichen zu beiden Seiten des Bindestrichs müssen die Enden eines Bereichs sein. Sie dürfen nicht Teil eines anderen Bereichs sein.


Beispiele

%[abcd]	Durchsucht das Eingabefeld nach den Zeichen a, b, c und d.

%[^abcd]	Durchsucht das Eingabefeld nach allen Zeichen außer a, b, c und d.

Sie können auch eine bereichseingrenzende Abkürzung [<erster>-<letzter>] zur Definition eines Bereichs von Buchstaben oder Zahlen in der Suchmenge verwenden.

Beispiele

Um alle dezimalen Ziffern zu erhalten, können Sie sie mit %[0123456789] explizit oder mit Hilfe des Kürzels %[0-9] angeben.

Um alle alpha-numerischen Zeichen zu erhalten, können Sie folgende Kürzel verwenden:

%[A-Z]  	alle Großbuchstaben

%[0-9A-Za-z]	alle Dezimalzahlen und Buchstaben

%[A-FT-Z] 	alle Großbuchstaben von A bis F und T bis Z


Wenn ...scanf-Funktionen abbrechen

Siehe auch

Eine ...scanf-Funktion könnte den Lesevorgang für ein bestimmtes Eingabefeld vor dem Erreichen des normalen Feldendes (whitespace-Zeichen) stoppen oder auch ganz abbrechen.

Stop-und-Springen zum nächsten Eingabefeld

...scanf-Funktionen beeenden den Lesevorgang und das Speichern des aktuellen Eingabefeldes und springen zum nächsten Eingabefeld, wenn eines der folgenden Ereignisse eintrifft:

Ein Zuweisungsunterdrückungszeichen (*) erscheint nach dem % im Formatbezeichner. Das aktuelle Eingabefeld wird zwar gelesen, aber nicht gespeichert.

width Zeichen sind gelesen worden.

Das nächste gelesen Zeichen kann nicht in dem aktuellen Format konvertiert werden (z.B. ein A im dezimalen Format).

Das nächste Zeichen im Eingabefeld ist nicht in der Suchmenge (oder in einer invertierten Suchmenge) enthalten.

Wenn scanf aus einem dieser Gründe den Lesevorgang im aktuellen Eingabefeld abbricht, wird das nächste Zeichen übergangen und ist entweder

das erste Zeichen in einem darauffolgendem Eingabefeld oder

das erste Zeichen in einer folgenden Leseoperation in der Eingabe.

Abbruch

...scanf-Funktionen brechen unter einem der folgenden Umstände ab:

1.	Das nächste Zeichen im Eingabefeld konfligiert mit dem korrespondierenden normalen Zeichen im Format-String überein.

2.	Das nächste Zeichen im Eingabefeld ist EOF.

3.	Der Format-String ist beendet.

Wenn im Format-String eine Zeichenfolge auftaucht, die nicht Teil einer Formatierungsanweisung ist, muß sie mit der aktuellen Zeichenfolge im Eingabefeld übereinstimmen.

...scanf-Funktionen lesen diese übereinstimmenden Zeichen, aber speichern sie nicht.

Wenn ein unverträgliches Zeichen auftaucht, bleibt es im Eingabefeld, als ob es die ...scanf-Funktion nicht gelesen hätte.


...scanf-Funktionen

Die ..scanf-Funktionen umfassen:

fscanf	liest und formatiert Eingaben von einem Stream

scanf	liest und formatiert Eingaben von stdin

sscanf	liest und formatiert Eingaben von einem String

vfscanf	liest und formatiert Eingaben von einem Stream unter Verwendung einer Argumentliste

vscanf	liest und formatiert Eingaben von stdin unter Verwendung einer Argumentliste

vsscanf	liest und formatiert Eingaben von einem String unter Verwendung einer Argumentliste


_searchenv, _wsearchenv

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *_searchenv(const char *file, const char *varname, char *buf);

char *_wsearchenv(const wchar_t *file, const wchar_t *varname, wchar_t *buf);

Beschreibung

Sucht nach einer Datei im Verzeichnispfad einer Umgebungsvariablen.

_searchenv versucht eine Datei zu finden, indem das Makro entlang des Pfades sucht, der durch die _Umgebungsvariable varname des Betriebssystems bestimmt wird. Typische Umgebungsvariablen, die Pfade enthalten sind PATH, LIB und INCLUDE.

_searchenv durchsucht zuerst das aktuelle Verzeichnis des aktuellen Laufwerks. Bleibt die Suche erfolglos, liest die Funktion die Pfadangaben in der Umgebungsvariablen varname und durchsucht der Reihe nach sämtliche darin enthaltenen Verzeichnisse, bis die Datei gefunden wird oder der Pfad zu Ende ist.

Wenn die Datei gefunden wurde, wird der vollständige Dateiname in dem durch buf angegebenen Puffer gespeichert. Dieser String kann beispielsweise bei einem nachfolgenden Aufruf von fopen oder exec... verwendet werden. Der Puffer muß groß genug sein, um jeden möglichen Dateinamen aufzunehmen. Kann die Datei nicht gefunden werden, zeigt buf auf einen leeren String (der nur ein Nullzeichen enthält).

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


searchpath, wsearchpath

Siehe auch	Beispiel	Portabilität

Syntax

#include <dir.h>

char *searchpath(const char *file);

wchar_t *wsearchpath( const wchar_t *file );

Beschreibung

Sucht im Verzeichnispfad des Betriebssystems nach einer Datei.

searchpath versucht die Datei file zu finden, indem entlang dem Systempfad des Betriebssystems gesucht wird, der durch den String PATH=… dargestellt wird. Als Funktionswert wird ein Zeiger auf den String mit dem vollständigen Pfadnamen zurückgegeben.

searchpath durchsucht zuerst das aktuelle Verzeichnis nach einer Datei mit dem durch den Parameter file angegebenen Namen. Bleibt die Suche erfolglos, liest die Funktion die Umgebungsvariable PATH und durchsucht der Reihe nach alle dort angegebenen Verzeichnisse.

Wenn die Datei gefunden wird, liefert searchpath einen Zeiger auf den vollständigen Dateinamen zurück. Dieser String kann beispielsweise für einen nachfolgenden Aufruf von fopen oder exec... verwendet werden.

Der zurückgelieferte Zeiger zeigt auf einen statischen Puffer, der bei jedem Aufruf von searchpath überschrieben wird.

Rückgabewert

Bei erfolgreicher Ausführung wird ein Zeiger auf einen String mit dem gefundenen Dateinamen zurückgegeben, ansonsten der Wert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_searchstr, _wsearchstr

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void _searchstr(const char *file, const char *ipath, char *buf);

void _wsearchstr(const wchar_t *file, const wchar_t *ipath,wchar_t *pathname);

Beschreibung

Durchsucht eine Verzeichnisliste nach einer Datei.

_searchstr versucht zu ermitteln, wo sich file befindet, indem entlang dem durch den String ipath festgelegten Pfad gesucht wird.

_searchstr durchsucht zuerst das aktuelle Verzeichnis nach einer Datei mit dem durch den Parameter file angegebenen Namen. Bleibt die Suche erfolglos, liest die Funktion die Pfadangaben in dem durch den Parameter ipath angegebenen String und durchsucht der Reihe nach alle darin enthaltenen Verzeichnisse. Die Verzeichnisse in ipath müssen durch Semikolons getrennt sein.

Wenn die Datei gefunden wurde, wird der vollständige Dateiname (Laufwerk, Verzeichnis und Dateiname) in dem durch buf angegebenen Puffer gespeichert. Dieser String kann dann beispielsweise bei einem nachfolgenden Aufruf von fopen oder exec... verwendet werden. Der Puffer muß groß genug sein, um jeden möglichen Dateinamen aufzunehmen. Die in stdlib.h definierte Konstante _MAX_PATH bestimmt die Maximallänge eines Dateinames. Kann die Datei nicht gefunden werden, wird buf ein leerer String zugewiesen (der nur ein Nullzeichen enthält).

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


setbuf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

void setbuf(FILE *stream, char *buf);

Beschreibung

Explizite Zuordnung eines Puffers zu einem Stream.

setbuf ordnet der durch stream angegebenen Datei den Puffer buf anstelle des automatisch zugeordneten Puffers zu. Die Funktion wird verwendet, wenn der Stream bereits geöffnet ist.

Ist buf null, bleiben die nachfolgenden Ein-/Ausgaben ungepuffert; andernfalls werden sie vollständig gepuffert. Die Puffergröße muß durch die in stdio.h definierte Konstante BUFSIZ festgelegt werden.

stdin und stdout arbeiten ungepuffert, wenn sie nicht umgeleitet sind. Ansonsten sind sie vollständig gepuffert. Mit setbuf kann die Art der Pufferung verändert werden kann.

Ungepuffert bedeutet, daß die in einen Stream geschriebene Zeichen unmittelbar an die Datei oder das Gerät übergeben werden. Gepuffert hingegen bedeutet, daß die Zeichen zunächst akkumuliert und dann erst als Block übergeben werden.

setbuf darf nur direkt nach dem Öffnen (oder direkt nach einem fseek-Aufruf) eines Streams angewendet werden, da die Ergebnisse ansonsten unvorhersehbar sind. Die Anwendung dieser Funktion auf ungepufferte Dateien ist dagegen problemlos und jederzeit möglich.

Eine häufige Fehlerursache besteht darin, daß für buf eine lokale Variable verwendet wird und dann die Datei nicht geschlossen wird, bevor die Ausführung der Funktion, in der die Pufferdeklaration enthalten ist, beendet wird.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_setcursortype

Beispiel	Portabilität

Syntax

#include <conio.h>

void _setcursortype(int cur_t);

Beschreibung

Legt die Form des Cursor fest.

Folgende Werte sind für cur_t möglich:

_NOCURSOR	Kein Cursor

_NORMALCURSOR	Unterstrich-Cursor (standardmäßig)

_SOLIDCURSOR	Kästchenförmiger Cursor

Hinweis:	Diese Funktion sollte nicht in Win32s- oder Win32-GUI-Anwendungen verwendet werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


setjmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <setjmp.h>

int setjmp(jmp_buf jmpb);

Beschreibung

Bereitet ein nicht-lokales goto vor.

setjmp speichert den Zustand der aktuellen Task in dem durch jmpb angegebenen Puffer und gibt 0 zurück.

Ein späterer Aufruf von longjmp mit jmpb stellt diesen Zustand wieder her - die Task setzt die Arbeit an der Stelle fort, an der sich der Aufruf von setjmp befindet.

Ein Task-Zustand beinhaltet:

Win 16 	Win 32

Alle Segmentregister	Segmentregister werden nicht gesichert

(CS, DS, ES, SS)

Registervariablen	Registervariablen

DI und SI	EBX, EDI, ESI

Stack-Zeiger (SP)	Stack-Zeiger (ESP)

Frame-Zeiger (BP)	Frame-Zeiger (EBP)

Flags	Flags werden nicht gesichert

Ein Task-Status ist vollständig genug, um mit setjmp Koroutinen zu implementieren.

setjmp muß vor longjmp aufgerufen werden. Die Routine, die setjmp aufgerufen und jmpb gesetzt hat, muß immer noch aktiv sein, bevor longjmp aufgerufen wird. Andernfalls sind die Ergebnisse unvorhersehbar.

setjmp ist besonders zur Behandlung von Fehlern und Exceptions geeignet, die in Low-level-Unterprogrammen auftreten.

Für DOS-Anwender:

Falls Ihr Programm mit Overlays arbeitet, können Sie die Funktionen setjmp und longjmp nicht zur Implementierung von Koroutinen heranziehen. Denn normalerweise sichern und erneuern setjmp und longjmp alle Registerinhalte, die für das Funktionieren der Koroutinen gebraucht werden. Aber der Overlay-Manager verwaltet nur den Inhalt eines Stacks, im Gegensatz zu Koroutinen. Diese benötigen gewöhnlich zwei Stacks bzw. Partitionen eines Stacks. Der Overlay-Manager ist nicht in der Lage, auf diese Informationen zurückzugreifen.

Sie können Hintergrund-Tasks mit jeweils eigenem Stack oder Stack-Abschnitt einsetzen, aber Sie müssen dafür sorgen, daß diese Tasks keinen überlagerten Code aufrufen. Und Sie dürfen auf keinen Fall Overlayversionen von setjmp oder longjmp verwenden, um zum oder vom Hintergrund zu wechseln. Wenn Sie die Verwendung von Overlay-Quelltext oder Support-Routinen vermeiden, dann stört die Existenz von Stacks im Hintergrund den Overlay-Managers nicht.

Rückgabewert

setjmp liefert beim ersten Aufruf immer den Wert 0. Wenn setjmp über longjmp aufgerufen wurde, gibt setjmp einen Wert ungleich 0 zurück (wie im Beispiel).


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


setlocale, _wsetlocale

Siehe auch	Beispiel	Portabilität

Syntax

#include <locale.h>

char *setlocale(int category, const char *locale);

wchar_t * _wsetlocale( int category, const wchar_t *locale);

Beschreibung

Auswahl oder Abfrage einer länderspezifischen Einstellung (Locale-Einstellung).

C++Builder unterstützt alle länderspezifischen Einstellungen, die von den Betriebssystemen NT 3.5x und Win95/NT 4.0 unterstützt werden. Einzelheiten entnehmen Sie bitte der jeweiligen Dokumentation.

Das Argument category kann folgende Werte annehmen:

Wert	Wirkung

LC_ALL	Wirkt sich auf alle nachfolgenden Kategorien aus.

LC_COLLATE	Wirkt sich auf strcoll und strxfrm aus.

LC_CTYPE	Wirkt sich auf alle Funktionen zur Verarbeitung von Ein-Byte-Zeichen aus. Die Funktionen mbstowcs und mbtowc sind davon nicht betroffen.

LC_MONETARY	Wirkt sich auf die Formatierung von monetären Beträgen durch die Funktion localeconv aus.

LC_NUMERIC	Wirkt sich auf das Dezimalzeichen nicht-monetärer Daten aus. Dies schließt die Funktionsfamilie printf sowie die von localeconv gelieferten Informationen ein.

LC_TIME	Wirkt sich auf strftime aus.

Der Parameter locale enthält einen Zeiger auf den Namen der Locale-Einstellung oder der Locale-Kategorie. Bei Übergabe eines NULL-Zeigers wird die aktuell gültige Locale-Einstellung zurückgeliefert. Wird ein Zeiger auf einen leeren String übergeben, so prüft setlocale anhand von Umgebungsvariablen, welche Locale-Einstellung ausgewählt werden soll. Bei den Namen der länderspezifischen Einstellungen wird nicht zwischen Groß- und Kleinbuchstaben unterschieden.

Wenn die angeforderte Locale-Einstellung nicht hergestellt werden kann, so bleibt die bisherige Einstellung gültig und ein NULL-Zeiger wird zurückgeliefert.

Wenn der locale-Parameter ein NULL-Zeiger ist, wird der Locale-String der entsprechenden Kategorie zurückgegeben. Enthält category den Wert LC_ALL, dann wird ein vollständiger Locale-String zurückgeliefert. Die Struktur des vollständigen Locale-Strings besteht aus den durch Semikolons getrennten Namen aller Kategorien der aktuellen Locale-Einstellung. Dieser String kann wiederum für den Parameter locale verwendet werden, wenn setlocale mit einem der LC_xxx-Werte aufgerufen wird. Dadurch werden alle im Locale-String angegebenen Kategorien wieder eingesetzt. Locale-Einstellungen können auf diese Weise gespeichert und wiederhergestellt werden. Wird der vollständige Locale-String zusammen mit nur einer Kategorie benutzt, beispielsweise mit LC_TIME, so wird nur diese Kategorie wiederhergestellt.

Wenn als Locale-Parameter ein leerer String ("") benutzt wird, wird eine implementierungsabhängige Locale-Einstellung verwendet. Dies ist ANSI-C-spezifisch.

Um in Ihrer Anwendung von dynamisch ladbaren Locale-Einstellungen zu profitieren, müssen Sie __USELOCALES__ in jedem Modul definieren. Andernfalls verwenden alle Funktionen und Makros, auf die sich länderspezifische Einstellungen auswirken, lediglich die standardmäßige Locale-Einstellung.

setlocale liefert die aktuell gültige Locale-Einstellung zurück, wenn im Parameter locale ein NULL-Zeiger übergeben wird. Bezeichnet der Parameter category eine einzelne Kategorie, wie etwa LC_COLLATE, so enthält der zurückgelieferte String den Namen dieser Kategorie. LC_ALL wird als Parameter category verwendet, um den vollständigen Locale-String zu erhalten, der alle aktuell gültigen Kategorienamen enthält.

    .

    .

    .

localenameptr = setlocale( LC_COLLATE, NULL );

if (localenameptr)

   printf( "%s\n", localenameptr );

    .

    .

    .

Die dadurch erzeugte Ausgabe beinhaltet einen der Modulnamen zusammen mit der angegebenen Code-Seite, zum Beispiel LC_COLLATE = English_United States.437.

    .

    .

    .

localenameptr = setlocale( LC_ALL, NULL );

if (localenameptr)

   printf( "%s\n", localenameptr );

    .

    .

    .

Eine Ausgabe des obigen Quelltextes könnte folgendermaßen lauten:

LC_COLLATE=English_United States.437;

   LC_TIME=English_United States.437;

   LC_CTYPE=English_United States.437;

Jede Kategorie in dem obigen vollständigem Locale-String wird durch ein Semikolon begrenzt. Der String kann von einer Anwendung kopiert und gespeichert werden. Zu einem späteren Zeitpunkt kann dann mit diesem String dieselbe Locale-Einstellung wiederhergestellt werden. Jeder Kategorienname entspricht den in locale.h definierten Konstanten für die Locale-Kategorien. Der erste Name bezeichnet daher die Kategorie LC_COLLATE, der zweite die Kategorie LC_CTYPE und so weiter. Alle weiteren in locale.h definierten Kategorien sind für zukünftige Implementierungen reserviert.

Es folgen einige Beispiele, wie Locale-Einstellungen mit setlocale ausgewählt werden können:

Alle Standard-Kategorien für die französische Locale-Einstellung setzen:

setlocale( LC_ALL, "French_France.850" );

Herausfinden, welche Code-Seite gerade benutzt wird:

   localenameptr = setlocale( LC_ALL, NULL );

Rückgabewert

Bei erfolgreicher Ausführung liefert setlocale einen String, der die Locale-Kategorie (oder eventuell alle Kategorien) der neuen Locale-Einstellung bezeichnet.

Wenn UNICODE definiert ist, gibt _wsetlocale einen wchar_t-String zurück.

Bei einem Fehler wird ein NULL-Zeiger zurückgeliefert, und die Locale-Einstellung bleibt unverändert. Alle weiteren möglichen Rückgabewerte wurdenbereits im Abschnitt Beschreibung behandelt.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


setmem

Siehe auch	Beispiel	Portabilität

Syntax

#include <mem.h>

void setmem(void *dest, unsigned length, char value);

Beschreibung

Füllt einen Speicherbereich mit einem Wert.

setmem setzt den durch dest angegebenen Speicherblock der Länge length Bytes auf den Wert value.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


setmode

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int setmode(int handle, int amode);

Beschreibung

Setzt den Modus einer geöffneten Datei.

setmode setzt den Modus der durch handle bezeichneten Datei entweder auf Text- oder auf Binärmodus. Für amode kann genau eine der beiden in fcntl.h definierten symbolischen Konstanten verwendet werden: O_BINARY oder O_TEXT.

Rückgabewert

Bei fehlerfreier Ausführung liefert setmode den früheren Modus zurück; ansonsten ist das Funktionsergebnis -1, und errno wird auf den folgenden Wert gesetzt:

EINVAL	Ungültiges Argument


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


setvbuf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int setvbuf(FILE *stream, char *buf, int type, size_t size);

Beschreibung

Explizite Zuordnung eines Puffers zu einem Stream.

setvbuf ordnet der durch stream angegebenen Datei den Puffer buf anstelle des automatisch vergebenen Puffers zu. Die Funktion kann nur angewendet werden, wenn die Datei bereits geöffnet ist.

Wenn buf null ist, wird über einen Aufruf von malloc ein Puffer der Größe size reserviert und der Datei zugeordnet. Der Puffer wird automatisch freigegeben, wenn die Datei wieder geschlossen wird. Der Parameter size bestimmt die Puffergröße und muß größer als 0 sein.

size darf nicht größer sein als die in limits.h definierte Konstante UINT_MAX.

stdin und stdout arbeiten ungepuffert, solange sie nicht umgeleitet sind. Umleitungen bewirken dagegen eine vollständige Pufferung. Ungepuffert bedeutet, daß Zeichen, die in einen Stream ausgegeben werden sollen, unmittelbar in die Datei bzw. das Gerät geschrieben werden. Gepuffert hingegen bedeutet, daß die auszugebenden Zeichen zunächst akkumuliert und dann blockweise geschrieben werden.

Der Parameter type muß einen der folgenden Werte annehmen:

_IOFBF 	Die Datei wird vollständig gepuffert. Wenn der Puffer leer ist, versucht der nächste Eingabebefehl, den Puffer komplett mit Daten zu füllen. Bei Ausgaben wird zunächst der Puffer gefüllt, erst danach wird der komplette Pufferinhalt geschrieben.

_IOLBF 	Ausgaben werden zeilenweise gepuffert: der Pufferinhalt wird nach jeder Ausgabe eines Zeilenvorschubs physikalisch geschrieben. Eingaben arbeiten dagegen genauso wie bei vollständiger Pufferung.

_IONBF 	Die Datei ist ungepuffert: Die Parameter buf und size werden ignoriert. Jeder Eingabebefehl liest direkt von der Datei, jeder Ausgabebefehl hat eine sofortige Schreibaktion zur Folge.

Eine häufige Fehlerursache besteht darin, für buf eine automatische (lokale) Variable zu verwenden, die Datei aber vor dem Ende der Funktion, in der der Puffer deklariert wurde, nicht zu schließen.

Rückgabewert

setvbuf liefert bei fehlerfreier Ausführung den Wert 0.

Ungültige Werte für type oder size, fehlender Speicherplatz für malloc oder die Anwendung auf eine nicht geöffnete Datei erzeugen ein Funktionsergebnis ungleich Null.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


signal

Siehe auch	Beispiel	Portabilität

Syntax

#include <signal.h>

void (_USERENTRY *signal(int sig, void (_USERENTRY *func)

                                  (int sig[, int subcode])))(int);

Beschreibung

Legt fest, wie das Programm auf Signale reagiert.

Über die Funktion signal können Sie festlegen, wie Ihr Programm auf die Auslösung des Signals sig reagiert. Sie können durch das Argument func eine eigene Routine zur Bearbeitung des Signals (einen Signal-Handler) definieren oder auch eine der beiden in signal.h vordefinierten Routinen SIG_DEFL und SIG_IGN einsetzen. Die Funktion func muß mit der Aufrufkonvention _USERENTRY benutzt werden.

Eine Routine, die ein Signal auffängt (wie zum Beispiel eine Gleitkommazahl), löscht auch das Signal. Um den Empfang von Signalen fortsetzen zu können, muß eine Signalbehandlung durch den erneuten Aufruf von signal reinstalliert werden.

Funktionszeiger	Bedeutung

SIG_DFL 	Das Programm wird beendet.

SIG_ERR 	Zeigt an, daß signal einen Fehler ergeben hat.

SIG_IGN 	Dieser Signaltyp wird ignoriert.

In der folgenden Tabelle finden Sie Signaltypen zusammen mit den von ihnen ausgelösten Standardaktionen:

Signaltyp	Bedeutung

SIGBREAK	Tastatur muß sich im Modus "raw" (Zeichen nicht interpretieren) befinden

SIGARBRT	Anormales Ende. Standardaktion entspricht dem Aufruf von _exit(3).

SIGFPE 	Arithmetischer Fehler aufgrund einer Division durch Null, einer ungültigen Operation usw. Standardaktion entspricht Aufruf von _exit(1).

SIGILL	Unzulässige Operation. Standardaktion entspricht Aufruf von _exit(1).

SIGINT	Strg+C-Interrupt. Standardaktion ist Aufruf von INT 23h.

SIGSEGV	Ungültiger Speicherzugriff. Standardaktion entspricht Aufruf von _exit(1).

SIGTERM	Beendigung des Programms wird angefordert. Standardaktion entspricht Aufruf von _exit(1).

SIGUSR1, SIGUSR2, SIGUSR3

Benutzerdefinierte Signale (nur in Win32 verfügbar), die nur durch den Aufruf von raise erzeugt werden können. Standardaktion: Das Signal wird ignoriert.

signal.h definiert einen Datentyp sig_atomic_t als größten atomaren Speicherzugriff, den der Prozessor automatisch laden oder speichern kann und der auch durch asynchrone Interrupts nicht unterbrochen werden kann. Für die Prozessoren der 8086-Familie ist dies ein Wort der Länge 16 Bit, für 80386 und höher ist es ein Wort der Länge 32 Bit, also ein Borland C++ Integer.

Wenn ein Signal durch die Funktion raise oder ein externes Ereignis erzeugt wird, geschieht folgendes:

Wurde für das Signal ein benutzerdefinierter Signal-Handler installiert, wird die Aktion für diesen Signaltyp auf SIG_DFL gesetzt.

Der benutzerdefinierte Handler wird aufgerufen. Der Signaltyp wird dabei als Parameter übergeben.

Benutzerdefinerte Handler können mit einem Aufruf von abort, _exit, exit oder longjmp enden oder auch mit einem normalen Rücksprung zum unterbrochenen Programm. Soll Ihre Handler-Funktion weitere Signale empfangen und verarbeiten, so müssen Sie signal innerhalb der Handler-Funktion erneut aufrufen.

Borland C++ implementiert bei den Signaltypen SIGFPE, SIGSEGV und SIGILL eine Erweiterung von ANSI C. Die entsprechenden benutzerdefinierten Signal-Handler erhalten nicht nur den Signaltyp, sondern auch noch einen oder zwei zusätzliche Parameter. Wenn einer dieser drei Signaltypen über raise ausgelöst wird, erhält der Handler einen der in der nachfolgenden Tabelle aufgeführten Werte als zusätzlichen Parameter (und kann daran erkennen, daß er explizit aufgerufen wurde). Die explizit aktivierenden Werte für SIGFPE, SIGSEGV und SIGILL sind:

Hinweis:	Deklarationen dieser Typen sind in float.h definiert.

Signal	Parameter

SIGFPE	FPE_EXPLICITGEN

SIGSEGV	SEGV_EXPLICITGEN

SIGILL	ILL_EXPLICITGEN

Wird ein Signal des Typs SIGFPE als Folge einer Gleitkomma-Exception ausgelöst, bekommt der benutzerdefinierte Handler die Art dieses Fehlers als einen zusätzlichen Parameter übergeben, das den Typ FPE_xxx des Signals festlegt. Wenn die Signaltypen SIGSEGV und SIGILL oder Varianten des Typs SIGFPE (FPE_INTOVFLOW oder FPE_INTDIV0) als Folge einer Prozessor-Exception auftauchen, wird der Handler mit zwei zusätzlichen Parametern aufgerufen:

1. Die Exception-Typen SIGSEGV, SIGILL oder SIGFPE (siehe float.h für diese Typen). Dieser erste Parameter ist der gewöhnliche Signaltyp von ANSI.

2. Einen Integer-Zeiger in den Stack der interrupt-Routine, die den benutzerdefinierten Signal-Handler aufgerufen hat. Dieser Zeiger zeigt auf eine Liste der Prozessorregister, die beim Auftreten des Fehlers gespeichert wurden. Die Register sind in derselben Reihenfolge wie die Parameter der Interrupt-Funktion (BP, DI, SI, DS, ES, DX, CX, BX, AX, IP, CS, FLAGS) gespeichert. Um bei der Rückgabe des Handlers einen veränderten Registerwert geändert zu erhalten, ändern sie einen der Plätze in dieser Liste.

Um beispielsweise einen neuen SI-Wert zu erhalten, könnten Sie so etwas tun:

*((int*)list_pointer + 2) = new_SI_value;

Auf diese Weise kann der Handler die Register überprüfen und alle von Ihnen gewünschten Einstellungen vornehmen.

Die folgenden Signale des SIGFPE-Typs können auftreten (bzw. generiert werden). Sie entsprechen den Fehlern, die der 8087-Prozessor erkennen kann, sowie INTEGER DIVIDE BY ZERO und INTERRUPT ON OVERFLOW bei der Haupt-CPU. (Die entsprechenden Deklarationen befinden sich in float.h.)

SIGFPE-Signal	Bedeutung

FPE_INTOVFLOW	INTO-Befehl mit gesetztem OF-Flag

FPE_INTDIV0	Integer duch 0 geteilt

FPE_INVALID	Ungültige Operation

FPE_ZERODIVIDE	Division durch Null

FPE_OVERFLOW	Numerischer Überlauf

FPE_UNDERFLOW	Numerischer Unterlauf

FPE_INEXACT	Ungenaues Ergebnis

FPE_EXPLICITGEN	Anwendungsprogramm führte raise(SIGFPE) aus

FPE_STACKFAULT	Über-/Unterlauf des Gleitkomma-Stack

FPE_STACKFAULT	Stack-Überlauf

Die Signale FPE_INTOVFLOW und FPE_INTDIV0 werden durch Integer-Operationen ausgelöst, die restlichen Signale durch Gleitkommaoperationen. Ob eine Gleitkomma-Exception ein Signal setzt, hängt vom Steuerwort des Koprozessors ab, das über die Routine _control87 verändert werden kann. Denormalisierte Exceptions werden direkt von Borland C++ behandelt und nicht an den Handler übergeben.

Folgende Signale des Typs SEGSEGV können auftreten:

SEGV_BOUND	ausgelöst durch BOUND-Befehl

SEGV_EXPLICITGEN	ausgelöst durch die Ausführung von raise(SIGSEGV)

Der Prozessorbefehl BOUND ist für die Prozessortypen 8088/86 nicht definiert. Die Prozessoren 186, 286, 386 sowie NEC V kennen diesen Befehl. Auf 80088/86 Prozessoren kann daher der Type SEGV_BOUND des Signals SIGSEGV nicht auftreten. Borland C++ generiert den BOUND-Befehl nicht, doch kann er in Inline-Assemblercode sowie separat assemblierten und eingebundenen Routinen verwendet werden.

Für Signale des Typs SIGILL sind die folgenden Konstanten definiert:

ILL_EXECUTION	ungültige Operationsanforderung

ILL_EXPLICITGEN	ausgelöst durch Ausführung von raise(SIGILL)

Die Prozessortypen 8088/86, NEC V20 und NEC V30 lösen bei illegalen Befehlen keinen Interrupt aus - SIGILL kann hier nur durch einen Aufruf von raise ausgelöst werden. Die Prozessortypen 186, 286, 386, NECV40 und NECV50 hingegen haben diesen Exception-Typ. Auf 8088-, 8086-, NEC V20- und NEC V30-Systemen kann der ILL_EXECUTION-Typ von SIGILL nicht auftreten.

Bei den Signalen SIGFPE, SIGSEGV oder SIGILL ist ein Rücksprung des Signal-Handler im allgemeinen nicht zu empfehlen, wenn der Koprozessorstatus fehlerhaft, das Ergebnis einer Integer-Division falsch, ein zu vermeidender Überlauf entstanden, ein BOUND-Befehl erfolglos oder eine Operation unzulässig ist. Ein Rücksprung ist nur dann empfehlenswert, wenn der Signal-Handler die Register so verändert, daß ein sinnvoller Rücksprungkontext existiert oder wenn sich anhand des Signaltyps (beispielsweise FPE_EXPLICITGEN, SEG_EXPLICITGEN oder ILL_EXPLICITGEN) erkennen läßt, daß das Signal explizit erzeugt wurde. Im allgemeinen sollten Sie jedoch eine Fehlermeldung ausgeben und das Programm mit _exit, exit oder abort beenden. Wird dennoch ein Rücksprung vorgenommen, sind die Folgen kaum vorhersehbar.

Hinweis:	Seien Sie besonders vorsichtig, wenn sie die Funktion signal in einem Multithread-Programm verwenden. Die Signale SIGINT, SIGTERM und SIGBREAK sind in einer Nicht-Win32-Anwendung nur im Haupt-Thread (Thread 1) verwendbar. Wenn eines dieser Signale auftritt, wird der aktuell ausgeführte Thread angehalten, und die Kontrolle wechselt zu dem von Thread 1 eingerichteten Signal-Handler (falls vorhanden). Andere Signale können durch jeden Thread verarbeitet werden.

Ein Signal-Handler sollte keine Laufzeitbibliotheksfunktionen von C++ verwenden, weil ein Deadlock von Semaphoren auftreten könnte. Statt dessen sollte der Handler einfach ein Flag oder einen Semaphor setzen und sofort zurückkehren.

Rückgabewert

Bei fehlerfreier Ausführung liefert signal einen Zeiger auf die Routine, die zuvor als Handler für Signale des angegebenen Typs gesetzt war.

Bei einem Fehler ist das Ergebnis von signal der Zeiger SIG_ERR, und errno wird auf den Wert EINVAL gesetzt.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


sin, sinl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double sin(double x);

long double sinl(long double x);

Beschreibung

Liefert den Sinus des Arguments zurück.

sin erwartet als Argument einen Winkel in der Einheit rad und liefert den dazugehörigen Sinus zurück.

sinl ist die long double-Version. Sie erfordert ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbehandlung kann für diese Funktionen über _matherr bzw. _matherrl modifiziert werden.

Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.

Rückgabewert

sin und sinl liefern den Sinus des Eingabewertes.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
sin	+	+	+	+	+		+
sinl	+		+	+			+


sinh, sinhl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double sinh(double x);

long double sinhl(long double x);

Beschreibung

Berechnet den Sinus hyperbolicus.

sinh berechnet den Sinus hyperbolicus, [image].

sinl ist die long double-Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Behandlung von Fehlern kann für diese Funktionen über _matherr bzw. _matherrl modifiziert werden.

Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.

Rückgabewert

sinh und sinhl liefern den Sinus hyperbolicus von x zurück.

Bei Überläufen liefert sinh HUGE_VAL und sinhl _LHUGE_VAL (mit korrektem Vorzeichen) zurück, und die globale Variable errno erhält den Wert ERANGE.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
sinh	+	+	+	+	+		+
sinhl	+		+	+			+


sleep

Beispiel	Portabilität

Syntax

#include <dos.h>

void sleep(unsigned seconds);

Beschreibung

Hält die Ausführung des Programms für einen bestimmten Zeitraum an.

sleep hält die Ausführung für die durch seconds angegebene Anzahl von Sekunden an und verwendet dabei die Uhr des Systems. Die Genauigkeit der Routine beträgt dabei eine Hundertstel Sekunde bzw. die Genauigkeit der Systemuhr, je nachdem, welche weniger genau ist.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	 	 	+


_sopen, _wsopen

Siehe auch	Beispiel	Portabilität

Syntax

#include <fcntl.h>

#include <sys\stat.h>

#include <share.h>

#include <io.h>

#include <stdio.h>

int _sopen(char *path, int access, int shflag[, int mode]);

int _wsopen(wchar_t *path, int access, int shflag[, int mode]);

Beschreibung

Öffnet eine Datei in einem Modus für gemeinsamen Zugriff.

_sopen öffnet die durch path angegebene Datei und bereitet je nach den für access, shflag und mode angegebenen Werten die Datei für gemeinsame Lese- und/oder Schreibzugriffe vor.

_wsopen ist die Unicode-Version von _sopen. Sie akzeptiert einen Dateinamen in Form eines wchar_t-Strings. Ansonsten besteht kein Unterschied zwischen den beiden Funktionen.

access wird durch die bitweise ODER-Verknüpfung der in den folgenden beiden Tabellen aufgeführten Flags gebildet.

Flags für Lesen und/oder Schreiben

Nur eines der folgenden Flags ist verwendbar:

O_RDONLY 	Nur Lesen

O_WRONLY 	Nur Schreiben

O_RDWR 	Lesen und Schreiben

Weitere Zugriff-Flags

Sie können jede logische Kombination der folgenden Flags verwenden:

O_NDELAY	Wird nicht verwendet und ist nur aus Gründen der UNIX-Kompatibilität definiert.

O_APPEND	Falls gesetzt, wird der Dateizeiger vor jedem Schreibzugriff an das Dateiende gesetzt.

O_CREAT	Falls die Datei bereits existiert, hat dieses Flag keine Wirkung. Wenn die Datei noch nicht existiert, wird sie erzeugt, und die Dateiattribute werden - wie beim Aufruf von chmod - anhand der in mode gesetzten Bits festgelegt.

O_TRUNC	Wenn die Datei bereits existiert, wird ihr vorheriger Inhalt gelöscht. Die Dateiattribute bleiben unverändert.

O_EXCL	Wird nur zusammen mit O_CREAT verwendet. Falls die Datei bereits existiert, wird ein Fehler zurückgeliefert.

O_BINARY	Die Datei wird im Binärmodus geöffnet.

O_TEXT	Die Datei wird im Textmodus geöffnet.

O_NOINHERIT	Die Datei wird nicht an untergeordnete Prozesse weitergegeben.

Hinweis:	Die symbolischen Konstanten O_... sind in fcntl.h definiert.

Wenn weder O_BINARY noch O_TEXT angegeben ist, wird die Datei in dem Modus, der durch die globale Variable _fmode gesetzt ist, geöffnet.

Wenn bei der Bildung von access das Flag O_CREAT verwendet wird, muß das Argument mode auf eine der folgenden in sys\stat.h definierten symbolischen Konstanten gesetzt werden:

mode-Wert	Zugriffsberechtigung

S_IWRITE 	Schreiben

S_IREAD 	Lesen

S_IREAD|S_IWRITE	Lesen und Schreiben

shflag legt den Typ des gemeinsamen Zugriffs, der auf die Datei path angewendet werden soll, fest. Die symbolischen Konstanten für shflag sind in share.h festgelegt.

shflag-Wert	Beschreibung

SH_COMPAT	Setzt Kompatibilitätsmodus

SH_DENYRW	Lesen und Schreiben nicht erlaubt

SH_DENYWR	Schreiben nicht erlaubt

SH_DENYRD	Lesen nicht erlaubt

SH_DENYNONE	Lesen und Schreiben erlaubt

SH_DENYNO	Lesen und Schreiben erlaubt

Rückgabewert

Wenn die Datei fehlerfrei geöffnet werden konnte, liefert die Funktion das Handle dieser Datei zurück (einen Integerwert größer als Null, über den weitere Operationen mit dieser Datei ausgeführt werden). Der Dateizeiger wird auf den Dateianfang gesetzt.

Im Fehlerfall liefert die Funktion den Wert -1 und setzt die globale Variable errno auf einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

EINVACC	Ungültiger Zugriffscode

EMFILE	Zu viele Dateien geöffnet

ENOENT	Pfad/Datei nicht vorhanden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


spawnl, spawnle, spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe

Siehe auch	Beispiels	Portabilität

Syntax

#include <process.h>

#include <stdio.h>

int spawnl(int mode, char *path, char *arg0, arg1, ..., argn, NULL);

int _wspawnl(int mode, wchar_t *path, wchar_t *arg0, arg1, ..., argn, NULL);

int spawnle(int mode, char *path, char *arg0, arg1, ..., argn, NULL, char *envp[]);

int _wspawnle(int mode, wchar_t *path, wchar_t *arg0, arg1, ..., argn, NULL, wchar_t *envp[]);

int spawnlp(int mode, char *path, char *arg0, arg1, ..., argn, NULL);

int _wspawnlp(int mode, wchar_t *path, wchar_t *arg0, arg1, ..., argn, NULL);

int spawnlpe(int mode, char *path, char *arg0, arg1, ..., argn, NULL, char *envp[]);

int _wspawnlpe(int mode, wchar_t *path, wchar_t *arg0, arg1, ..., argn, NULL, wchar_t *envp[]);

int spawnv(int mode, char *path, char *argv[]);

int _wspawnv(int mode, wchar_t *path, wchar_t *argv[]);

int spawnve(int mode, char *path, char *argv[], char *envp[]);

int _wspawnve(int mode, wchar_t *path, wchar_t *argv[], wchar_t *envp[]);

int spawnvp(int mode, char *path, char *argv[]);

int _wspawnvp(int mode, wchar_t *path, wchar_t *argv[]);

int spawnvpe(int mode, char *path, char *argv[], char *envp[]);

int _wspawnvpe(int mode, wchar_t *path, wchar_t *argv[], wchar_t *envp[]);

Hinweis:	In den Funktionen spawnle, spawnlpe, spawnv, spawnve, spawnvp und spawnvpe muß der letzte String den Wert NULL haben.

Beschreibung

Die Funktionen der spawn...-Familie erzeugen untergeordnete Prozesse, die ihre eigenen Dateien ausführen. Es muß ausreichend Speicherplatz für das Laden und Ausführen dieser Prozesse vorhanden sein.

Der Wert des Parameters mode legt fest, wie sich der aufrufende Prozeß, der sogenannte übergeordneten Prozeß, nach der Ausführung von spawn... verhält. Die möglichen Werte von mode sind:

P_WAIT	Der übergeordnete Prozeß bleibt im Speicher, wird aber für die Dauer der Ausführung des untergeordneten Prozesses angehalten.

P_NOWAIT	Die Ausführung des übergeordneten Prozesses wird nach dem Start des untergeordneten Prozesses fortgesetzt. Die Prozeß-ID des untergeordneten Prozesses wird zurückgeliefert, so daß der übergeordnete Prozeß über eine Aufruf von cwait oder wait auf das Ende des untergeordneten Prozesses warten kann. Dieser Modus ist gegenwärtig für 16-Bit-Windows oder 16-Bit-DOS nicht verfügbar. Bei seiner Verwendung wird ein Fehlerwert generiert.

P_NOWAITO	Entspricht P_NOWAIT mit der Ausnahme, daß die ID des untergeordneten Prozesses vom Betriebssystem nicht gespeichert wird. Daher kann der übergeordnete Prozeß nicht mit cwait oder wait auf das Ende des untergeordneten Prozesses warten.

P_DETACH	Entspricht P_NOWAITO mit der Ausnahme, daß der untergeordnete Prozeß im Hintergrund ohne Tastatur- und Bildschirmzugriff ausgeführt wird.

P_OVERLAY 	Der übergeordnete Prozeß wird vom untergeordneten Prozeß im Speicher überlagert und nach dessen Beendigung nicht fortgesetzt. Dies entspricht dem Aufruf einer exec...-Funktion.

Der Parameter path gibt den Namen des untergeordneten Prozesses an. Die Funktion spawn... ruft die Suche nach path auf und verwendet dabei den Standard-Suchalgorithmus des Betriebssystems:

Wenn weder eine Namenserweiterung noch ein Punkt angegeben ist, wird zuerst nach Dateien ohne Erweiterung, dann nach .EXE-Dateien, anschließend nach .COM-Dateien und zuletzt nach .BAT-Dateien gesucht.

Wenn eine Namenserweiterung angegeben ist, wird nur nach dem genauen Dateinamen gesucht.

Wenn nur ein Punkt angegeben ist, wird nach dem Dateinamen ohne Erweiterung gesucht.

Wenn path keine explizite Verzeichnisangabe enthält, durchsuchen die spawn...-Funktionen, die das Suffix p aufweisen, zuerst im aktuellen Verzeichnis und danach in sämtlichen Verzeichnissen, die durch die Umgebungsvariable PATH spezifiziert sind.

Die einzelnen Funktionen der spawn...-Familie unterscheiden sich durch die Suffixe p, l, v und e, wobei jeder dieser Buchstaben für andere Fähigkeiten steht. Im einzelnen bedeuten:

p	Die spawn-Funktion sucht nach dem untergeordneten Prozeß nicht nur innerhalb des aktuellen Verzeichnisses, sondern auch in sämtlichen durch die Umgebungsvariable PATH festgelegten Verzeichnissen. Die Varianten ohne das Suffix p suchen nur innerhalb des aktuellen Verzeichnisses.

l	Die Argumentzeiger arg0, arg1, ..., argn werden als separate Argumente übergeben. Das Suffix l wird normalerweise verwendet, wenn die Zahl der Parameter vorher bekannt ist.

v	Die Argumentzeiger argv[0], ..., arg[n] als Zeiger-Array übergeben. Diese Form wird normalerweise verwendet, wenn die Anzahl der Parameter variabel ist.

e	Erlaubt die Übergabe des Zeiger-Array envp (d.h. eines eigenen Environment für den untergeordneten Prozeß). Ohne das Suffix e erbt der untergeordnete Prozeß das Environment des übergeordneten Prozesses.

Jede Funktion der spawn...-Familie enthält entweder ein l oder ein v im Namen, die weiteren Kombinationen mit p und e zur Pfadsuche und zur Vererbung der Umgebung sind optional.

Zwei Beispiele dazu:

spawnl verwendet eine Liste von Argumenten, sucht nur im aktuellen Verzeichnis nach dem untergeordneten Prozeß und übergibt an den untergeordneten Prozeß das Environment des übergeordneten Prozesses.

spawnvpe übergibt die Argumentzeiger als Zeiger-Array und führt nötigenfalls eine Suche nach dem untergeordneten Prozeß über die mit PATH gesetzten Verzeichnisse aus. Mit Hilfe des Parameters envp wird die Umgebung des untergeordneten Prozesses geändert.

Sämtliche spawn...-Funktionen müssen mindestens ein Argument an den untergeordneten Prozeß übergeben, nämlich arg0 bzw. argv[0]. Dieses erste Argument enthält per Konvention eine Kopie von path. (Die Übergabe anderer Daten als erstes Argument erzeugt jedoch keinen Fehler.) Zur Übergabe einer leeren Argumentliste an den untergeordneten Prozeß muß arg0 bzw. argv[0] gleich NULL sein.

Ein in arg0 bzw. argv[0] übergebener path-Wert ist nur unter den DOS-Versionen 3.x für den untergeordneten Prozeß verfügbar. Bei älteren Versionen kann der untergeordnete Prozeß den in arg0 bzw. argv[0] übergebenen 0-Wert nicht benutzen.

Wenn das l-Suffix verwendet wird, zeigt arg0 normalerweise auf denselben String wie path. arg1,...,argn zeigen auf weitere Strings, die Argumentliste wird durch ein (obligatorisches!) NULL beendet.

Wenn das e-Suffix verwendet wird, wird über den Parameter envp eine Liste mit neuen Einstellungen der Umgebung übergeben. envp zeigt auf ein Array von char-Zeigern. Jedes Element dieses Array ist ein nullterminierter String der Form

envvar = Wert

wobei envvar der Name der Umgebungsvariable und Wert der String-Wert ist, auf den envvar gesetzt wird. Das letzte Element des Array muß einen Zeiger mit dem Wert null enthalten, der das Listenende gekennzeichnet. Wenn envp den Wert null hat, verwendet der untergeordnete Prozeß das Environment des übergeordneten Prozesses.

Die Gesamtlänge von arg0 + arg1 + ... + argn (oder von argv[0] + argv[1] + ... + argv[n]) darf 260 Byte unter Windows (128 Bytes unter DOS) nicht überschreiten (inklusive der automatisch eingesetzten Leerzeichen zur Trennung einzelner Parameter). Nullzeichen werden hierbei nicht mitgezählt.

spawn... schließt keine Dateien. Durch den übergeordneten Prozeß geöffnete Dateien stehen auch dem untergeordneten Prozeß zur Verfügung.

Rückgabewert

Bei fehlerfreier Ausführung liefert eine spawn...-Funktion mit mode P_WAIT den Exit-Code des untergeordneten Prozesses zurück (0 bei normaler Beendigung). Wenn der untergeordnete Prozeß exit explizit mit einem Wert ungleich Null aufruft, kann der Exit-Status auf einen Wert ungleich 0 gesetzt werden.

Ist mode auf P_NOWAIT oder P_NOWAITO gesetzt, dann liefern die spawn...-Funktionen die Prozeß-ID des untergeordneten Elements zurück. Bei Verwendung von P_NOWAIT kann diese zurückgelieferte Prozeß-ID an cwait weitergegeben werden.

Bei einem Fehler wird -1 zurückgeliefert, und errno erhält einen der folgenden Werte:

E2BIG	Argumentliste zu lang

EINVAL	Ungültiger Wert für mode

ENOENT	Pfad/Dateiname nicht gefunden

ENOEXEC	exec-Formatfehler

ENOMEM	Nicht genug Platz im Hauptspeicher


Beispiele

spawnl

spawnle

spawnlp

spawnlpe

spawnv

spawnve

spawnvp

spawnvpe


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


_splitpath, _wsplitpath

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void _splitpath(const char *path, char *drive, char *dir, char *name, char *ext);

void _wsplitpath(const wchar_t *path, wchar_t *drive, wchar_t *dir, wchar_t *name, wchar_t *ext);

Beschreibung

Zerlegt einen vollständigen Pfadnamen in seine Einzelkomponenten.

_splitpath übernimmt im Parameter path einen vollständigen Dateinamen als String der Form

  X:\DIR\SUBDIR\NAME.EXT

und zerlegt ihn in seine vier Einzelkomponenten. Diese werden in den durch drive, dir, name und ext bezeichneten Strings gespeichert. (Alle fünf Parameter müssen übergeben werden, einzelne davon dürfen aber NULL sein, was zur Folge hat, daß die zugehörige Komponente zwar analysiert, aber nicht gespeichert wird.) Für Maximalgrößen aller beteiligen Strings sind in stdlib.h die Konstanten _MAX_DRIVE, _MAX_DIR, _MAX_PATH, _MAX_FNAME und _MAX_EXT definiert. Dabei muß das abschließende Nullzeichen jeweils mitgezählt werden.

Konstante	String

_MAX_PATH	path

_MAX_DRIVE	drive; inklusive Doppelpunkt (:)

_MAX_DIR	dir; inklusive führendem und abschließendem umgekehrten Schrägstrich (\)

_MAX_FNAME	name

_MAX_EXT	ext; inklusive führendem Punkt (.)

_splitpath unterstellt, daß die durch drive, dir, name und ext bezeichneten Strings eine ausreichende Größe haben, um jede nicht leere Komponente zu speichern.

_splitpath behandelt die Interpunktionszeichen aus path in folgender Weise:

drive enthält den Laufwerksbezeichner mit einem Doppelpunkt (C:, A: usw.).

dir enthält einen führenden und abschließenden umgekehrten Schrägstrich (\BC\INCLUDE\, \SOURCE\ usw.).

name enthält den Dateinamen.

ext enthält den Punkt, der die Namenserweiterung einleitet (.C, .EXE usw.).

_makepath und _splitpath verhalten sich invers zueinander. Die Anwendung von _makepath auf die durch _splitpath ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


sprintf, swprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int sprintf(char *buffer, const char *format[, argument, ...]);

int swprintf(wchar_t *buffer, const wchar_t *format[, argument, ...]);

Beschreibung

Schreibt formatierte Ausgaben in einen String.

Hinweis:	Detaillierte Informationen über Formatierungsanweisungen finden Sie unter printf.

sprintf übernimmt eine Reihe von Argumenten, auf die jeweils eine Formatierungsanweisung angewendet wird. Die Formatierungsanweisungen sind in dem String enthalten, auf den format zeigt. Die so formatierten Daten werden in den durch buffer angegebenen String geschrieben.

sprintf wendet die erste Formatierungsanweisung auf das erste Argument an, die zweite auf das zweite Argument usw. Die Anzahl der Formatierungsanweisungen und die der Argumente muß gleich sein.

Rückgabewert

sprintf liefert die Anzahl der ausgegebenen Zeichen zurück, wobei das abschließende Nullzeichen nicht mitgezählt wird.

Im Falle eines Fehlers ist das Funktionsergebnis EOF.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


sqrt, sqrtl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double sqrt(double x);

long double sqrtl(long double x);

Beschreibung

sqrt berechnet die positive Quadratwurzel des Arguments x.

sqrtl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbearbeitung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.

Rückgabewert

sqrt und sqrtl liefern die positive Quadratwurzel des Arguments, wenn x eine reelle Zahl und positiv ist. Ist x reell und negativ, wird die globale Variable errno auf den Wert

EDOM	Bereichsfehler

gesetzt.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
sqrt	+	+	+	+	+		+
sqrtl	+		+	+			+


srand

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

void srand(unsigned seed);

Beschreibung

Initialisiert den Zufallszahlengenerator.

Der Zufallszahlengenerator wird beim Aufruf von srand mit einem Argumentwert von 1 neu initialisiert. Durch den Aufruf von srand mit einem bestimmten Parameter seed kann er auf einen neuen Startwert gesetzt werden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


sscanf, swscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int sscanf(const char *buffer, const char *format[, address, ...]);

int swscanf(const wchar_t *buffer, const wchar_t *format[, address, ...]);

Beschreibung

Liest und formatiert Eingaben aus einem String.

Hinweis:	Einzelheiten zu Formatierungsanweisungen finden Sie unter scanf.

sscanf liest eine Reihe von Eingabefeldern zeichenweise aus dem durch buffer angegebenen String. Auf jedes Feld wird dann die entsprechende Formatierungsanweisung angewendet, die in dem durch format angegebenen Format-String enthalten ist. Gelesene Eingaben werden an den Adressen gespeichert, die in den Parametern hinter format übergeben werden. Die Anzahl von Eingabefeldern muß mit der Anzahl von Formatierungsanweisungen und Adressen übereinstimmen.

sscanf kann das Lesen eines bestimmten Eingabefeldes stoppen, bevor das normale Feldende (ein Whitespace-Zeichen) erreicht ist, oder auch den Lesevorgang vollständig abbrechen. Die möglichen Ursachen hierfür sind unter scanf erläutert.

Rückgabewert

sscanf liefert die Anzahl der fehlerfrei gelesenen, konvertierten und gespeicherten Felder zurück. Gelesene, aber nicht gespeicherte Felder werden nicht mitgezählt.

Der Versuch, über das Ende des Strings hinauszulesen, liefert den Wert EOF.

Wurden keine Felder gespeichert, so wird 0 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


stackavail

Siehe auch	Beispiel	Portabilität

Syntax

#include <malloc.h>

size_t stackavail(void);

Beschreibung

Ermittelt die Größe des verfügbaren Stack-Speichers.

stackavail gibt die Größe des verfügbaren Speichers auf dem Stack in Bytes zurück. Diese Größe entspricht dem dynamischen Speicher, auf den alloca zugreifen kann.

Rückgabewert

stackavail liefert einen Wert vom Typ size_t zurück, der der Größe des verfügbaren Speichers in Byte entspricht.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_status87

Beispiel	Portabilität

Syntax

#include <float.h>

unsigned int _status87(void);

Beschreibung

Liefert den Status der Gleitkommafunktionen zurück.

_status87 liefert den aktuellen Wert des Statusworts der Gleitkommafunktionen zurück. Das Wort muß als Bitmuster interpretiert werden und enthält neben den Statusbits des 80x87-Koprozessors weitere vom Exception-Handler entdeckte Bedingungen.

Rückgabewert

Die Bits des Rückgabewerts stellen den Gleitkommastatus dar. In der Header-Datei float.h finden Sie die vollständige Definition der von _status87 zurückgelieferten Bits.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


stime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

int stime(time_t *tp);

Beschreibung

Setzt Datum und Uhrzeit des Systems.

stime setzt Datum und Uhrzeit des Systems auf den über den Zeiger tp angegebenen Wert, der in Sekunden seit dem 1. Januar 1970, 0 Uhr 00:00 (Greenwich Mean Time) gemessen wird.

Rückgabewert

stime liefert immer den Wert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	 	 	 	+


stpcpy;_wstpcpy;_stpcpy
_stpcpy, _wcspcpy

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *_stpcpy(char *dest, const char *src);

wchar * _wcspcpy(wchar *dest, const wchar *src);

Beschreibung

Kopiert einen String in einen anderen.

_stpcpy kopiert den String src in dest. Der Vorgang wird abgebrochen, sobald das abschließende Nullzeichen von src erreicht wird.

Rückgabewert

_stpcpy liefert einen Zeiger zurück, der auf das abschließende Nullzeichen von dest zeigt.

Wenn UNICODE definiert ist, liefert _wcspcpy einen Zeiger auf das abschließende Nullzeichen des Strings wchar_t dest.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


strcat, _mbscat, wcscat

Beispiel	Portabilität

Syntax

#include <string.h>

char *strcat(char *dest, const char *src);

wchar_t *wcscat(wchar_t *dest, const wchar_t *src);

#include <mbstring.h>

unsigned char *_mbscat(unsigned char *dest, const unsigned char *src);

Beschreibung

Hängt einen String an einen anderen.

strcat hängt eine Kopie von src an das Ende von dest. Die Länge des resultierenden Strings ist strlen(dest) + strlen(src).

Rückgabewert

Zurückgeliefert wird ein Zeiger auf den zusammengesetzten String.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strcat	+	+	+	+	+	+	+
_fstrcat	+		+


strchr, _mbschr, wcschr

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strchr(const char *s, int c);                          /* nur C */

const char *strchr(const char *s, int c);                    // nur C++

char *strchr( char *s, int c);                               // nur C++

wchar_t *wcschr(const wchar_t *s, int c);

#include <mbstring.h>

unsigned char * _mbschr(const unsigned char *s, unsigned int c);

Beschreibung

Sucht einen String nach dem ersten Auftreten eines bestimmten Zeichens ab.

strchr sucht den über s angegebenen String nach dem Zeichen c ab, wobei die Suche mit dem ersten Zeichen von s beginnt. strchr findet das erste Vorkommen des betreffenden Zeichens. Das abschließende Nullzeichen wird zum Inhalt des String gezählt und als letztes verglichen, so daß ein Aufruf wie

strchr(strs,0)

einen Zeiger auf das abschließende Nullzeichen von strs liefert.

Rückgabewert

strchr liefert einen Zeiger auf die erste Fundstelle des Zeichens c im String s zurück bzw. den Wert null, wenn der String dieses Zeichen nicht enthält.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strchr	+	+	+	+	+	+	+
_fstrchr	+		+


strcmp, _mbscmp, wcscmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

int strcmp(const char *s1, const char *s2);

int wcscmp(const wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

int _mbscmp(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Vergleicht zwei Strings miteinander.

strcmp führt mit den Inhalten von s1 und s2 einen unsigned-Vergleich durch. Beginnend mit dem ersten Zeichen werden die beiden Strings zeichenweise verglichen, bis zwei korrespondierende Zeichen ungleich sind oder das Ende der Strings erreicht wird.

Rückgabewert

Wenn s1..	liefert strcmp einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

grösser als s2 ist	> 0


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


strcmpi

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

int strcmpi(const char *s1, const char *s2);

Beschreibung

Vergleicht zwei Strings ohne Unterscheidung von Groß- und Kleinschreibung.

strcmpi führt mit den Inhalten von s1 und s2 einen unsigned-Vergleich durch. Zwischen Groß- und Kleinbuchstaben wird dabei nicht unterschieden (wie stricmp--implementiert als Makro).

Die Funktion gibt einen Wert zurück (<0, 0 oder >0), der auf dem Vergleich von s1 (oder einem Teil davon) mit s2 (oder einem Teil davon) basiert. strcmpi unterscheidet bei deutschen Umlauten dennoch zwischen Groß- und Kleinschreibung.

Die Routinen stricmp und strcmpi haben dieselbe Wirkung. strcmpi ist ein in string.h implementiertes Makro, das Aufrufe von strcmpi in Aufrufe von stricmp übersetzt, strcmpi wurde aus Kompatibilitätsgründen zu anderen C-Compilern definiert. Für die Verwendung von strcmpi muß daher die Header-Datei string.h eingebunden werden.

Rückgabewert

Wenn s1..	liefert strcmpi einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

grösser als s2 ist	> 0


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	 	+


strcoll, _stricoll, _mbscoll, _mbsicoll, wcscoll, _wcsicoll

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

int strcoll(const char *s1, const char *s2);

int wcscoll(const wchar_t *s1, const wchar_t *s2);

int _stricoll(const char *s1, const char *s2);

int _wcsicoll(const wchar_t *s1, wconst_t char *s2);

#include <mbstring.h>

int _mbscoll(const unsigned char *s1, const unsigned char *s2);

int _mbsicoll(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Vergleicht zwei Strings.

strcoll vergleicht den String, auf den s1 zeigt, mit dem String, auf den s2 zeigt. Dabei wird die in der Kategorie LC_COLLATE der aktuellen Locale-Einstellung gesetzte Vergleichsreihenfolge verwendet.

_stricoll arbeitet wie strcoll, macht aber keinen Unterschied zwischen Groß- und Kleinbuchstaben.

Rückgabewert

Wenn s1..	liefern strcoll und _stricoll einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

grösser als s2 ist	> 0


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strcoll	+		+	+	+	+	+
_stricoll	+			+


strcpy
strcpy, _mbscpy, wcscpy

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strcpy(char *dest, const char *src);

wchar_t *wcscpy(wchar_t *dest, const wchar_t *src);

#include <mbstring.h>

unsigned char *_mbscpy(unsigned char *dest, const unsigned char *src);

Beschreibung

Kopiert einen String in einen anderen.

Die Funktion kopiert den String src in dest. Das abschließende Nullzeichen von src wird als letztes Zeichen kopiert.

Rückgabewert

strcpy liefert dest zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


strcspn, _mbscspn, wcscspn

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

size_t strcspn(const char *s1, const char *s2);

size_t wcscspn(const wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

size_t _mbscspn(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Liefert die Länge des Teilstrings zurück, der keines der Zeichen einer bestimmten Zeichenmenge enthält.

strcspn liest den String s1 zeichenweise, bis eines der in s2 enthaltenen Zeichen auftritt. Die Anzahl der in s1 gelesenen Zeichen bildet den Rückgabewert. Das abschließende Nullzeichen wird nicht mitgezählt. Beide Strings werden durch den Suchvorgang nicht verändert.

Rückgabewert

strcspn liefert die Länge des Teilstrings von s1 zurück, der nur aus Zeichen besteht, die in s2 nicht vorkommen.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strcspn	+	+	+	+	+	+	+
_fstrcspn	+		+


_strdate, _wstrdate

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

char *_strdate(char *buf);

wchar_t *_wstrdate(wchar_t *buf);

Beschreibung

Konvertiert das aktuelle Datum in einen String.

_strdate konvertiert das aktuelle Datum in einen String und speichert diesen in dem durch buf angegebenen Puffer. buf muß mindestens 9 Zeichen lang sein.

Der String ist durch ein Nullzeichen abgeschlossen und hat das Format MM/DD/YY. MM, DD und YY sind Zahlen mit jeweils zwei Ziffern und geben Monat, Tag und Jahr an. Der String wird durch ein Nullzeichen beendet.

Rückgabewert

Der Rückgabewert von _strdate ist buf, die Adresse des Datum-Strings.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	+


strdup, _mbsdup, _wcsdup

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strdup(const char *s);

wchar_t *_wcsdup(const wchar_t *s);

#include <mbstring.h>

unsigned char *_mbsdup(const wchar_t *s);

Beschreibung

Kopiert einen String in einen neuen Speicherbereich.

strdup bestimmt zuerst die Länge des übergebenen String s, reserviert danach mit malloc einen Speicherbereich entsprechender Größe (strlen(s) + 1) und kopiert den Inhalt von s in diesen neu reservierten Speicherbereich. Der Programmierer muß den Speicher selbst wieder freigeben, wenn dieser nicht mehr benötigt wird.

Rückgabewert

strdup liefert einen Zeiger auf den neu reservierten Speicherbereich zurück, der den duplizierten String enthält. Wenn nicht genug Platz im Speicher ist, liefert die Funktion den Wert null.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strdup	+	+	+	+			+
_fstrdup	+		+


_strerror

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char  *_strerror(const char *s);

Beschreibung

Generiert einen String mit einer Fehlermeldung.

Mit der Funktion _strerror können eigene Fehlermeldungen generiert werden. _strerror liefert einen Zeiger auf einen nullterminierten String zurück, der die Fehlermeldung enthält.

Wenn für s der Wert NULL angegeben wird, dann zeigt der von _strerror zurückgelieferte Wert auf die letzte Fehlermeldung.

Wird für s ein Wert ungleich NULL angegeben, dann enthält der generierte String den durch den Parameter s übergebenen String (Ihre Fehlermeldung), einen Doppelpunkt, ein Leerzeichen, die zuletzt erzeugte Systemfehlermeldung und einen Zeilenvorschub (\n). Der übergebene String s sollte höchstens 94 Zeichen lang sein.

Rückgabewert

_strerror liefert einen Zeiger auf den generierten Fehlerstring. Der String wird in einem statischen Puffer erzeugt, dessen Inhalt bei jedem Aufruf dieser Funktion überschrieben wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	+


strerror

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strerror(int errnum);

Beschreibung

Liefert einen Zeiger auf einen String mit einer Fehlermeldung.

strerror erwartet einen int-Wert im Parameter errnum (eine Fehlernummer) und liefert einen Zeiger auf einen statischen String zurück, der die zum Wert von errnum gehörige Fehlermeldung enthält.

Rückgabewert

strerror liefert einen Zeiger auf den generierten Fehlerstring. Dieser String wird in einem statischen Puffer erzeugt, dessen Inhalt bei jedem Aufruf dieser Funktion überschrieben wird.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


strftime, wcsftime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

size_t strftime(char *s, size_t maxsize, const char *fmt, const struct tm *t);

size_t wcsftime(wchar_t *s, size_t maxsize, const wchar_t *fmt, const struct tm *t);

Beschreibung

Formatiert die Uhrzeit für die Ausgabe.

strftime formatiert die Uhrzeit im Argument t und gibt sie in das Array aus, auf das das Argument s zeigt. Bei der Formatierung werden die in fmt festgelegten Formatierungsanweisungen angewandt. Alle normalen Zeichen werden unverändert kopiert. Es werden maximal maxsize Zeichen nach s geschrieben.

Die Zeit ist nach der aktuellen Localen-Kategorie LC_TIME formatiert.

Rückgabewert

strftime liefert im Erfolgsfall die Anzahl der Zeichen zurück, die nach s geschrieben wurden.

Ist die Anzahl der benötigten Zeichen größer als maxsize, so wird 0 zurückgeliefert.

Mehr über strftime

ANSI-definierte Formatierungsanweisungen

POSIX-definierte Formatierungsanweisungen

POSIX-definierte Formatierungsanweisungsmodifikationen


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


strftime Format-String

Besteht aus null oder mehr Direktiven (Formatierungsanweisungen) und normalen Zeichen. Eine Direktive besteht aus dem Zeichen %, dem ein Zeichen folgt, das die durchzuführende Ersetzung festlegt.


ANSI-defined format specifiers for strftime
ANSI-definierte Formatierungsanweisungen für strftime

Siehe auch

Die folgende Tabelle beschreibt die ANSI-definierten Formatierungsanweisungen für den Format-String, der mit strftime verwendet wird.

Formatierungsanweisung	Ersetzungen

%%	%-Zeichen

%a	Abgekürzter Wochentagname

%A	Vollständiger Wochentagname

%b	Abgekürzter Monatsname

%B	Vollständiger Monatsname

%c	Datum und Uhrzeit

%d	Zwei Ziffern für den Tag im Monat (01 - 31)

%H	Zwei Ziffern für die Stunde (00 - 23)

%I	Zwei Ziffern für die Stunde (01 - 12)

%j	Drei Ziffern für den Tag im Jahr (001 - 366)

%m	Zwei Ziffern für den Monat als Dezimalzahl (1 - 12)

%M	Zwei Ziffern für die Minute (00 - 59)

%p	AM oder PM (vormittags oder nachmittags)

%S	Zwei Ziffern für die Sekunde (00 - 59)

%U	Zwei Ziffern für die Wochenzahl, wobei der Sonntag den ersten Tag der Woche darstellt (00 - 53)

%w	Wochentag, wobei 0 dem Sonntag entspricht (0 - 6)

%W	Zwei Ziffern für die Wochenzahl, wobei der Montag den ersten Tag der Woche darstellt (00 - 53)

%x	Datum

%X	Uhrzeit

%y	Zwei Ziffern für das Jahr ohne Jahrhundert (00 - 99)

%Y	Jahr mit Jahrhundert

%Z	Name der Zeitzone oder keine Zeichen, wenn keine Zeitzone festgelegt ist


POSIX-definierte Formatierungsanweisungen für strftime

Siehe auch

Die folgende Tabelle beschreibt die POSIX-definierten Anweisungen für den Format-String, der mit strftime verwendet wird.

Hinweis:	Sie müssen __USELOCALES__ definieren, um diese Deskriptoren zu verwenden.

Formatierungsanweisung	Ersetzung

%C	Jahrhundert als Dezimalzahl (00 - 99). Zum Beispiel 1992 => 19

%D	Datum im Format mm/tt/jj

%e	Tag des Monats als Dezimalzahl in einem zweistelligen Feld mit führendem Leerzeichen (1 -31)

%h	Ein Synonym für %b

%n	Zeilenvorschubzeichen

%r	12-Stunden-Zeitformat (01 - 12) mit am/pm-String d.h. "%I:%M:%S %p"

%t	Tabulatorzeichen

%T	24-Stunden-Zeitangabe (00 - 23) im Format "HH:MM:SS"

%u	Wochentag als Dezimalzahl (1 Montag - 7 Sonntag)

Modifikationen

strftime unterstützt ferner für bestimmte Anweisungen POSIX-definierte Modifikationen. Weitere Informationen unter POSIX-definierte Formatierungsanweisungsmodifikationen für strftime.


POSIX-definierte Formatierungsanweisungsmodifikationen für strftime

Siehe auch

Die folgende Tabelle beschreibt die POSIX-definierten Modifikationen für die folgenden Format-String-Anweisungen, die mit strftime verwendet wird.

Hinweis:	Sie müssen __USELOCALES__ definieren, um diese Deskriptoren zu verwenden.

Deskriptormodifikation	Ersetzungen

%Od	Tag des Monats unter Verwendung von Zahlen und Buchstaben

%Oe	Tag des Monats unter Verwendung von Zahlen und Buchstaben

%OH	Stunde (24-Stunden) unter Verwendung von Zahlen und Buchstaben

%OI	Hour (12-Stunden) unter Verwendung von Zahlen und Buchstaben

%Om	Monat unter Verwendung von Zahlen und Buchstaben

%OM	Minuten unter Verwendung von Zahlen und Buchstaben

%OS	Sekunden unter Verwendung von Zahlen und Buchstaben

%Ou	Wochentag als Zahl unter Verwendung von Zahlen und Buchstaben

%OU	Wochenzahl des Jahres unter Verwendung von Zahlen und Buchstaben

%Ow	Wochentag als Zahl unter Verwendung von Zahlen und Buchstaben

%OW	Wochentag des Jahres unter Verwendung von Zahlen und Buchstaben

%Oy	Jahr (Offset von %C) unter Verwendung von Zahlen und Buchstaben

%O-Modifizierer

Wenn der Modifizierer %O vor allen unterstützten numerischen Formatierungsanweisungen (z.B. %Od; siehe oben) verwendet wird, dann wird der numerische Wert in die entsprechende Ordinalzahl konvertiert. Existiert die Ordinalzahl nicht, so wird die unmodifizierte Formatierungsanweisung verwendet.

Das aktuelle Datum sei 4/20/94. Dann erzeugt

die Formatierungsanweisung %d den Wert 20 und

die Formatierungsanweisung %Od den Wert 20th.


stricmp, _mbsicmp, _wcsicmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

int stricmp(const char *s1, const char *s2);

int _wcsicmp(const wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

int _mbsicmp(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Vergleicht zwei Strings ohne Unterscheidung zwischen Groß- und Kleinschreibung.

stricmp führt mit den Inhalten von s1 und s2 einen unsigned-Vergleich durch. Beginnend mit dem ersten Zeichen wird so lange zeichenweise verglichen, bis die korrespondierenden Zeichen ungleich sind oder das Ende der Strings erreicht wird. Groß- und Kleinbuchstaben werden hierbei nicht unterschieden.

Zurückgeliefert wird ein Wert(<0, 0 oder >0) der auf dem Vergleich von s1 (oder eines Teils davon) mit s2 (oder eines Teils davon) basiert.

Die Routinen stricmp und strcmpi erfüllen dieselbe Funktion. strcmpi ist ein in string.h implementiertes Makro, das Aufrufe von strcmpi in Aufrufe von stricmp übersetzt. Daher müssen Sie die Header-Datei string.h einbinden, wenn Sie das Makro stricmp verwenden wollen.

Rückgabewert

Wenn s1..	liefert stricmp einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

grösser als s2 ist	> 0


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
stricmp	+	+	+	+	+	+	+
_fstricmp	+		+


strlen, _mbslen, wcslen, _mbstrlen

Beispiel	Portabilität

Syntax

#include <string.h>

size_t strlen(const char *s);

size_t wcslen(const wchar_t *s);

#include <mbstring.h>

size_t _mbslen(const unsigned char *s);

#include <stdlib.h>

size_t _mbstrlen(const char *s)

Beschreibung

Berechnet die Länge eines Strings.

strlen berechnet die Länge des durch s angegebenen Strings.

_mbslen und _mbstrlen prüfen das String-Argument, um festzustellen, wieviele Multibyte-Zeichen der String enthält.

Auf _mbstrlen wirkt sich die durch die Funktion setlocale festgelegte Einstellung der Kategorie LC_CTYPE aus. Die Funktion prüft, ob das String-Argument ein gültiger Multibyte-String ist.

_mbslen wird durch die aktuell benutzte Code-Seite beeinflußt. Diese Funktion prüft nicht auf Multibyte-Validität.

Rückgabewert

strlen liefert die Anzahl der Zeichen des Strings s zurück. Das abschließende Nullzeichen wird dabei nicht mitgezählt.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strlen	+	+	+	+	+	+	+
_fstrlen	+		+


strlwr, _mbslwr, _wcslwr

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strlwr(char *s);

wchar_t *_wcslwr(wchar_t *s);

#include <mbstring.h>

unsigned char *_mbslwr(unsigned char *s);

Beschreibung

Konvertiert alle Großbuchstaben in einem String in Kleinbuchstaben.

strlwr konvertiert sämtliche Großbuchstaben des durch s übergebenen Strings in Kleinbuchstaben. Dabei wird die Kategorie LC_CTYPE der aktuellen Locale-Einstellung berücksichtigt. In der Locale-Einstellung C werden die Großbuchstaben A bis Z in die Kleinbuchstaben a bis z konvertiert. Andere Zeichen (insbesondere Umlaute) werden nicht berücksichtigt.

Rückgabewert

strlwr liefert einen Zeiger auf den String s zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strlwr	+	+	+	+	+	+	+
_fstrlwr	+		+


strncat
strncat, _mbsncat, wcsncat

Beispiel	Portabilität

Syntax

#include <string.h>

char *strncat(char *dest, const char *src, size_t maxlen);

wchar_t *wcsncat(wchar_t *dest, const wchar_t *src, size_t maxlen);

#include <mbstring.h>

unsigned char *_mbsncat(unsigned char *dest, const unsigned char *src, size_t maxlen);

Beschreibung

Hängt einen Teilstring an einen anderen.

strncat hängt die ersten maxlen Zeichen von src an die bereits in dest vorhandenen Zeichen an. Die Operation wird beendet, wenn entweder maxlen Zeichen kopiert wurden oder das Ende von src erreicht ist. Als letztes schreibt strncat grundsätzlich ein Nullzeichen in dest. Die maximale Länge des resultierenden Strings beträgst strlen(dest) + maxlen.

Diese drei Funktionen verhalten sich völlig gleich. Sie unterscheiden sich nur hinsichtlich des Typs der Argumente und Rückgabewerte.

Rückgabewert

strncat liefert dest zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strncat	+	+	+	+	+	+	+
_fstrncat	+		+


strncmp, _mbsncmp, wcsncmp

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

int strncmp(const char *s1, const char *s2, size_t  maxlen);

int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t  maxlen);

#include <mbstring.h>

int _mbsncmp(const unsigned char *s1, const unsigned char *s2, size_t  maxlen);

Beschreibung

Vergleicht eine bestimmte Anzahl von Zeichen zweier Strings miteinander.

strncmp führt den gleichen unsigned-Vergleich wie strcmp durch, vergleicht aber maximal die ersten maxlen Zeichen von s1 und s2 miteinander. Beginnend mit dem ersten Zeichen, wird zeichenweise verglichen, bis die korrespondierenden Zeichen ungleich sind oder maxlen Zeichen geprüft wurden.

Rückgabewert

strncmp vergleicht s1 (oder einen Teil davon) mit s2 (oder einen Teil davon) und liefert aufgrund des Vergleichs einen Integerwert

< 0	wenn s1 kleiner als s2 ist

== 0	wenn s1 gleich s2 ist

> 0	wenn s1 größer als s2 ist.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strncmp	+	+	+	+	+	+	+
_fstrncmp	+		+


strncoll, strnicoll, _mbsncoll, _mbsnicoll, _wcsncoll, _wcsnicoll
_strncoll, _strnicoll, _mbsncoll, _mbsnicoll, _wcsncoll, _wcsnicoll

Siehe auch	Portabilität

Syntax

#include <string.h>

int _strncoll(const char *s1, const char *s2, size_t n);

int _wcsncoll(const wchar_t *s1, const wchar_t *s2, size_t n);

int _strnicoll(const char *s1, const char *s2, size_t n);

int _wcsnicoll(const wchar_t *s1, const wchar_t *s2, size_t n);

#include <mbstring.h>

int _mbsncoll(const unsigned char *s1, const unsigned char *s2, size_t n);

int _mbsnicoll(const unsigned char *s1, const unsigned char *s2, size_t n);

Description

_strncoll vergleicht n Elemente des Strings, auf den s1 zeigt, mit dem String, auf den s2 zeigt. Hierbei wird die Kategorie LC_COLLATE der aktuellen Locale-Einstellung berücksichtigt.

_strnicoll arbeitet wie _strncoll, unterscheidet aber nicht zwischen Groß- und Kleinbuchstaben.

Rückgabewert

Wenn s1	liefern _strncoll und _strnicoll einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

größer als s2 ist	> 0


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+


strncmpi, wcsncmpi

Beispiel	Portabilität

Syntax

#include <string.h>

int strncmpi(const char *s1, const char *s2, size_t n);

int wcsncmpi(const wchar_t *s1, const wchar_t *s2, size_t n);

Beschreibung

Vergleicht eine bestimmte Anzahl von Zeichen zweier Strings. Es wird kein Unterschied zwischen Groß- und Kleinschreibung gemacht.

strncmpi vergleicht (in einem signed-Vergleich) maximal n Zeichen von s1 und s2 miteinander. Beginnend mit dem ersten Zeichen wird zeichenweise solange verglichen, bis die korrespondierenden Zeichen ungleich oder n Zeichen untersucht worden sind. Zwischen Groß- und Kleinbuchstaben wird nicht unterschieden. (strncmpi entspricht strnicmp--implementiert als Makro). Zurückgeliefert wird ein Wert (<0, 0 oder >0), der auf dem Vergleich von s1 (oder eines Teils davon) mit s2 (oder eines Teils davon) beruht.

Die Routinen strnicmp und strncmpi  erfüllen dieselbe Funktion; strncmpi ist ein in string.h implementiertes Makro, das Aufrufe von strncmpi in Aufrufe von strnicmp übersetzt. strncmpi wurde aus Kompatibilitätsgründen zu anderen C-Compilern definiert. Um strncmpi zu verwenden, muß daher die Header-Datei string.h eingebunden werden.

Rückgabewert

Wenn s1..	liefert stmcmpi einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

grösser als s2 ist	> 0


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+


strncpy, _mbsncpy, wcsncpy

Beispiel	Portabilität

Syntax

#include <stdio.h>

char *strncpy(char *dest, const char *src, size_t maxlen);

wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t maxlen);

#include <mbstring.h>

unsigned char *_mbsncpy(unsigned char *dest, const unsigned char *src, size_t maxlen);

Beschreibung

Kopiert eine bestimmte Anzahl von Bytes von einem String in einen anderen, wobei je nach Bedarf abgeschnitten oder aufgefüllt wird.

strncpy kopiert bis zu maxlen Zeichen des über src angegebenen Strings in dest. Dabei schreibt strncpy immer genau maxlen Zeichen. Wenn also src weniger als maxlen Zeichen enthält, wird eine entsprechende zusätzliche Anzahl von Nullzeichen in dest angehängt. Wenn src mehr als maxlen Zeichen umfaßt, bleibt der nach dest kopierte String ohne abschließendes Nullzeichen.

Rückgabewert

strncpy liefert dest zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strncpy	+	+	+	+	+	+	+
_fstrncpy	+		+


_strnextc, _mbsnextc, _wcsnextc

Beispiel

Syntax

#include <tchar.h>

unsigned int _strnextc(const char *str);

#include <mbstring.h>

unsigned int _mbsnextc (const unsigned char *str);

Beschreibung

Der Zugriff auf diese Routinen sollte mit Hilfe der portablen Funktion _tcsnextc erfolgen. Diese Funktionen prüfen das aktuelle Zeichen in str. Der Zeiger auf str bleibt unverändert.

Rückgabewert

Diese Funktionen liefern den Integerwert des Zeichens, auf das str zeigt.


strnicmp, _mbsnicmp, _wcsnicmp

Beispiel	Portabilität

Syntax

#include <string.h>

int strnicmp(const char *s1, const char *s2, size_t maxlen);

int _wcsnicmp(const wchar_t *s1, const wchar_t *s2, size_t maxlen);

#include <mbstring.h>

int _mbsnicmp(const unsigned char *s1, const unsigned char *s2, size_t maxlen);

Beschreibung

Vergleicht eine bestimmte Anzahl von Zeichen zweier Strings ohne Unterscheidung von Groß- und Kleinschreibung.

strnicmp vergleicht (in einem signed-Vergleich) maximal maxlen Zeichen von s1 und s2. Es wird kein Unterschied zwischen Groß- und Kleinschreibung gemacht. Beginnend mit dem ersten Zeichen, wird zeichenweise verglichen, bis die korrespondierenden Zeichen ungleich sind oder das Ende des Strings erreicht wird.

Zurückgeliefert wird ein Wert (<0, 0 oder >0), der auf dem Vergleich von s1 (oder eines Teils davon) mit s2 (oder eines Teils davon) beruht.

Rückgabewert

Wenn s1..	liefert stmicmp einen Wert

kleiner als s2 ist	< 0

gleich s2 ist	== 0

grösser als s2 ist	> 0


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strnicmp	+		+	+			+
_fstrnicmp	+		+


strnset, _mbsnset, _wcsnset

Beispiel	Portabilität

Syntax

#include <string.h>

char *strnset(char *s, int ch, size_t n);

wchar_t *_wcsnset(wchar_t *s, wchar_t ch, size_t n);

#include <mbstring.h>

unsigned char *_mbsnset(unsigned char *s, unsigned int ch, size_t n);

Beschreibung

Setzt eine angegebene Anzahl von Zeichen eines Strings auf ein bestimmtes Zeichen.

strnset überschreibt die ersten n Zeichen des durch s angegebenen Strings mit dem Zeichen ch. Wenn n > strlen(s) ist, dann wird n durch strlen(s) ersetzt. strnset beendet die Operation, wenn n Zeichen überschrieben wurden oder wenn das abschließende Nullzeichen erreicht wird.

Rückgabewert

Jede dieser Funktionen liefert s zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strnset	+		+	+			+
_fstrnset	+		+


strpbrk, _mbspbrk, wcspbrk

Beispiel	Portabilität

Syntax

#include <string.h>

char *strpbrk(const char *s1, const char *s2);          /* nur C */

const char *strpbrk(const char *s1, const char *s2);    // nur C++

char *strpbrk(char *s1, const char *s2);                // nur C++

wchar_t * wcspbrk(const wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

unsigned char *_mbspbrk(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Sucht einen String nach dem ersten Vorkommen bestimmter Zeichen ab.

strpbrk sucht den über s1 angegebenen String nach dem ersten Vorkommen jedes in s2 enthaltenen Zeichens ab.

Rückgabewert

Die Funktion liefert einen Zeiger auf die erste Fundstelle eines Zeichens aus s2 zurück. Ist kein Zeichen aus s2 in s1 enthalten, liefert strpbrk den Wert null zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strpbrk	+	+	+	+	+	+	+
_fstpbrk	+		+


strrchr, _mbsrchr, wcsrchr

Siehe auch	Beispiel	Portabilität

Syntax

char *strrchr(const char *s, int c);                  /* nur C */

const char *strrchr(const char *s, int c);            // nur C++

char *strrchr(char *s, int c);                        // nur C++

wchar_t *wcsrchr(const wchar_t *s, wchar_t c);

#include <mbstring.h>

unsigned char * _mbsrchr(const unsigned char *s, unsigned int c);

Beschreibung

Sucht einen String nach dem letzten Vorkommen eines bestimmten Zeichens ab.

strrchr sucht den über s angegebenen String nach dem Zeichen c ab, wobei die Suche mit dem letzten Zeichen von s beginnt. Das abschließende Nullzeichen wird zum Stringinhalt gerechnet und als erstes verglichen.

Rückgabewert

strrchr liefert einen Zeiger auf das letzte Vorkommen des Zeichens c in s zurück bzw. den Wert null, wenn der String dieses Zeichen nicht enthält.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strrchr	+	+	+	+	+	+	+
_fstrrchr	+		+


strrev, _mbsrev, _wcsrev

Beispiel	Portabilität

Syntax

#include <string.h>

char *strrev(char *s);

wchar_t *_wcsrev(wchar_t *s);

#include <mbstring.h>

unsigned char *_mbsrev(unsigned char *s);

Beschreibung

Dreht die Reihenfolge der Zeichen eines String um.

strrev spiegelt die Reihenfolge sämtlicher Zeichen des über s angegebenen String (aus Meier\0 wird reieM\0). Das abschließende Nullzeichen bleibt unverändert.

Rückgabewert

strrev liefert einen Zeiger auf den gespiegelten String zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strrev	+		+	+			+
_fstrrev	+		+


strset, _mbsset, _wcsset

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strset(char *s, int ch);

wchar_t *_wcsset(wchar_t *s, wchar_t ch);

#include <mbstring.h>

unsigned char *_mbsset(unsigned char *s, unsigned int ch);

Beschreibung

Überschreibt sämtliche Zeichen eines String mit einem bestimmten Zeichen.

strset überschreibt sämtliche Zeichen des durch s angegebenen String mit dem Zeichen ch und bricht erst beim schließenden Nullzeichen ab.

Rückgabewert

strset liefert s zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strset	+		+	+			+
_fstrset	+		+


strspn, _mbsspn, wcsspn

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

size_t strspn(const char *s1, const char *s2);

size_t wcsspn(const wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

size_t _mbsspn(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Sucht einen String nach dem ersten Teilstring ab, der Bestandteil einer gegebenen Menge von Zeichen ist.

Findet den ersten Teilstrings von s1, der ausschließlich aus den in s2 angegebenen Zeichen besteht.

Rückgabewert

strspn liefert die Länge des Teilstrings von s1, der ausschließlich aus Zeichen besteht, die in s2 enthalten sind.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strspn	+	+	+	+	+	+	+
_fstrspn	+		+


strstr, _mbsstr, wcsstr

Beispiel	Portabilität

Syntax

#include <string.h>

char *strstr(const char *s1, const char *s2);                /* nur C */

const char *strstr(const char *s1, const char *s2);          // nur C++

char *strstr(char *s1, const char *s2);                      // nur C++

wchar_t * wcsstr(const wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

unsigned char * _mbsstr(const unsigned char *s1, const unsigned char *s2);

Beschreibung

Sucht einen String nach dem Vorkommen eines bestimmten Teilstrings ab.

strstr sucht den über s1 angegebenen String nach dem ersten Vorkommen des Teilstrings s2 ab.

Rückgabewert

strstr liefert einen Zeiger auf den Beginn von s2 in s1 zurück bzw. den Zeigerwert null, wenn s2 in s1 nicht enthalten ist.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strstr	+	+	+	+	+	+	+
_fstrstr	+		+


_strtime, _wstrtime

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

char *_strtime(char *buf);

wchar_t *_wstrtime(wchar_t *buf);

Beschreibung

Konvertiert die aktuelle Uhrzeit in einen String.

_strtime konvertiert die aktuelle Uhrzeit in einen String und speichert diesen in dem durch buf angegebenen Puffer. buf muß mindestens 9 Zeichen lang sein.

Der String hat das folgende Format:

    HH:MM:SS

HH, MM und SS sind jeweils Zahlen mit zwei Ziffern und geben Stunde, Minute und Sekunde an. Der String ist nullterminiert.

Rückgabewert

Der Rückgabewert von _strtime ist buf, die Adresse des Uhrzeit-Strings.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


strtod, _strtold, wcstod, _wcstold

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

double strtod(const char *s, char **endptr);

double wcstod(const wchar_t *s, wchar_t **endptr);

long double _strtold(const char *s, char **endptr);

long double _wcstold(const wchar_t *s, wchar_t **endptr);

Beschreibung

Konvertiert einen String in einen double- bzw. in einen long double-Wert.

strtod konvertiert den durch s angegebenen String in einen double-Wert. Der Inhalt des String muß daher als double interpretierbar sein und das folgende Format haben:

   [ws] [sn] [ddd] [.] [ddd] [fmt[sn]ddd]

mit

[ws]	=	optionales Whitespace-Zeichen

[sn]	=	optionales Vorzeichen (+ oder -)

[ddd]	=	optionale Ziffern

[fmt]	=	optionales Exponentenzeichen (e oder E)

[.]	=	optionaler Dezimalpunkt

strtod erkennt außerdem +INF und -INF für plus bzw. minus Unendlich sowie +NAN und -NAN für Not-A-Number (keine darstellbare Zahl).

Beispiele für gültige Angaben sind:

  + 1231.1981 e-1

  502.85E2

  + 2010.952

Solange der Parameter endptr nicht null ist, wird *endptr von strtod auf das Zeichen innerhalb von s gesetzt, durch das die Analyse abgebrochen wurde (*endptr = &abbruch_zeichen). endptr ist für die Fehlersuche nützlich.

_strtold ist die long double Version. Sie konvertiert einen String in einen Wert vom Typ long double.

Rückgabewert

Diese Funktionen liefern das Ergebnis der Konvertierung von s als double (strtod) oder als long double (_strtold) zurück. Im Falle eines Überlaufs wird plus oder minus HUGE_VAL (strtod) bzw. _LHUGE_VAL (_strtold) zurückgeliefert.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strtod	+	+	+	+	+	+	+
_strtold	+		+	+			+


strtok, _mbstok, wcstok

Beispiel	Portabilität

Syntax

#include <string.h>

char *strtok(char *s1, const char *s2);

wchar_t *wcstok(wchar_t *s1, const wchar_t *s2);

#include <mbstring.h>

unsigned char *_mbstok(unsigned char *s1, const unsigned char *s2);

Beschreibung

Sucht einen String nach einer von mehreren Zeichenfolgen ab, die, durch Trennzeichen voneinander abgetrennt, in einem zweiten String definiert sind.

strtok betrachtet den über s1 angegebenen String als Folge von null oder mehr Zeichenfolgen (Token), die voneinander durch ein oder mehrere der in s2 definierten Zeichen getrennt sind.

Der erste Aufruf von strtok liefert einen Zeiger auf den Beginn der ersten gefundenen Zeichenfolge in s1 zurück und setzt ein Nullzeichen unmittelbar hinter das Ende der Zeichenfolge. Folgende Aufrufe von strtok mit dem Wert NULL anstelle des Arguments s1 liefern die restlichen Zeichenfolgen in s1.

Der zur Trennung dienende String s2 kann bei jedem Aufruf von strtok variiert werden.

Hinweis:	Der Aufruf von strtok darf nicht in einen Funktionsaufruf verschachtelt sein, der ebenfalls strtok verwendet. Das Ergebnis wäre eine Endlosschleife.

Rückgabewert

strtok liefert einen Zeiger auf den Beginn der gefundenen Zeichenfolge in s1 zurück. Wenn keine weitere Zeichenfolge gefunden wird, ist der ein Nullzeiger.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strtok	+	+	+	+	+	+	+
_fstrtok	+		+


strtol, wcstol

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

long strtol(const char *s, char **endptr, int radix);

long wcstol(const wchar_t *s, wchar_t **endptr, int radix);

Beschreibung

Konvertiert einen String in einen long-Wert.

strtol konvertiert den durch s angegebenen String in einen long-Wert. Der Stringinhalt muß daher als long-Wertinterpretierbar sein und folgendes Format haben:

   [ws] [sn] [0] [x] [ddd]

mit

[ws] 	=	optionales Whitespace-Zeichen

[sn] 	=	optionales Vorzeichen (+ oder -)

[0] 	=	optionale Null (0)

[x] 	=	optionales x oder X

[ddd] 	=	optionale Ziffern

strtol  bricht den Lesevorgang ab, wenn ein Zeichen nicht dem obigen Format entspricht.

Liegt radix zwischen 2 und 36, so wird s im Zahlensystem zur Basis radix interpretiert. Ist radix 0, so legen die ersten Zeichen von s die verwendete Basis fest:

Erstes Zeichen	Zweites Zeichen	Interpretation

0	1 bis 7	Oktalsysteml

0	x oder X	Hexadezimalsystem

1 bis 9	Dezimalsystem

Ist radix gleich 1, kleiner als 0 oder größer als 36, so wird der Parameter als ungültiger Wert interpretiert.

Bei Ausgabe ungültiger Werte für radix liefert die Funktion 0 zurück und setzt den Zeiger *endptr auf den Stringanfang.

Falls der Wert in s als Oktalzahl interpretiert werden soll, werden nur die Zeichen zwischen 0 und 7 erkannt.

Soll der Wert in s als Dezimalzahl interpretiert werden, werden nur die Zeichen 0 bis 9 erkannt.

Falls der Wert in s als Zahl eines Zahlensystems zu einer anderen Basis interpretiert werden soll, werden nur die Zeichen, die zur Repräsentation von Zahlen dieses Systems verwendet werden, erkannt. (Beispielsweise nur die Zeichen 0 bis 4, wenn radix gleich 5 ist. Ist radix gleich 20, werden nur die Zeichen 0 bis 9 und A bis J erkannt.)

Wenn endptr ungleich null ist, wird *endptr auf die Adresse des ersten nicht analysierbaren Zeichens in s gesetzt (*endptr = &abbruch_zeichen).

Rückgabewert

strtol liefert das Ergebnis der Konvertierung als long-Wert, im Fehlerfall den Wert 0.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


strtoul, wcstoul

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

unsigned long strtoul(const char *s, char **endptr, int radix);

unsigned long wcstoul(const wchar_t *s, wchar_t **endptr, int radix);

Beschreibung

Konvertiert einen String in einen unsigned long-Wert im gegebenen radix.

strtoul arbeitet genauso wie strtol, konvertiert aber die durch s angegebene Zeichenfolge in einen unsigned long-Wert (statt in einen long-Wert). Beachten Sie dazu auch die Beschreibung von strtol.

Rückgabewert

strtoul liefert das Ergebnis der Konvertierung als unsigned long-Wert, im Fehlerfall den Wert 0 zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+ 	+ 	+


strupr, _mbsupr, _wcsupr

Siehe auch	Beispiel	Portabilität

Syntax

#include <string.h>

char *strupr(char *s);

wchar_t *_wcsupr(wchar_t *s);

#include <mbstring.h>

unsigned char *_mbsupr(unsigned char *s);

Beschreibung

Konvertiert alle Kleinbuchstaben eines String in Großbuchstaben.

strupr konvertiert die Kleinbuchstaben des durch s angegebenen Strings in Großbuchstaben. Dabei wird die Kategorie LC_TYPE der aktuellen Locale-Einstellung berücksichtigt. In der standardmäßigen Locale-Einstellung C werden die Buchstaben a bis z in die Buchstaben A bis Z konvertiert, und alle anderen Zeichen (insbesondere die deutschen Umlaute) bleiben unverändert.

Rückgabewert

strupr liefert s zurück.


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
strupr	+		+	+			+
_fstrupr	+		+


strxfrm, wcsxfrm

Siehe auch	Beispiel	Portabilität

Syntax

#include<string.h>

size_t strxfrm(char *target, const char *source, size_t n);

size_t wcsxfrm(wchar_t *target, const wchar_t *source, size_t n);

Beschreibung

Transformiert einen Teilstring anhand einer bestimmten Sortierreihenfolge.

strxfrm transformiert maximal n Zeichen des durch source angegebenen Strings so in den String target, daß die Funktion strcmp, angewendet auf die Ergebnisstrings der Funktion, dieselben Werte zurückliefert wie die Funktion strcoll, angewendet auf die Ausgangsstrings.

Einschließlich des abschließenden Nullzeichens werden maximal n Zeichen nach target transformiert.

Der Ergebnisstring richtet sich nach der Kategorie LC_COLLATE der aktuellen Locale-Einstellung. Der generierte Spezial-String kann mit anderen Strings desselben Typs byteweise (beispielsweise per strcmp) verglichen werden. Die Vergleichsergebnisse entsprechen dann der aktuellen Locale-Einstellung für Vergleiche. Diese Spezial-Strings können als Schlüssel oder Symbol-Strings ("tokenized strings") aufgefaßt werden und sind jeweils nur innerhalb einer Locale-Einstellung zueinander kompatibel.

Die in target enthaltenen Token werden anhand der von strcoll verwendeten Vergleichsgewichtungen aus den Vergleichstabellen der aktuellen Locale-Einstellung erzeugt.

Die Funktion wird beendet, wenn alle Ebenen bearbeitet wurden oder wenn die Länge des Symbol-String den Parameter maxlen entspricht.

Alle überflüssigen Token werden aus der Token-Menge jeder Ebene entfernt.

Der Puffer muß zur Aufnahme des Symbol-String groß genug sein. Seine Größe hängt von der Länge des String source, von der Anzahl der Vergleichsebenen, von den Regeln für jede Ebene sowie vom Auftreten von Sonderzeichen ab. Bestimmte Sonderzeichen verursachen zusätzliche Bearbeitungsschritte und damit erhöhten Platzbedarf. So benötigt das französische Zeichen "oe" den doppelten Platz, da es in einigen Locale-Einstellungen pro Ebene auf zwei Vergleichsgewichtungen erweitert wird. Teil-Strings mit Ersetzungen benötigen ebenfalls zusätzlichen Platz.

Für die Berechnung des benötigten Speicherplatzes gibt es keine allgemeingültige Formel. Es sind jedoch mindestens (Ebenen * Stringlänge) Bytes erforderlich.

Rückgabewert

strxfrm liefert die Anzahl der transformierten Zeichen zurück. Das abschließende Nullzeichen wird nicht mitgezählt. Ist der zurückgelieferte Wert gleich oder größer als n, dann ist der Inhalt von target unbestimmt.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	+	+	+


swab

Beispiel	Portabilität

Syntax

#include <stdlib.h>

void swab(char *from, char *to, int nbytes);

Beschreibung

Vertauscht Bytepositionen.

swab liest nbytes Bytes von dem durch from bezeichneten Speicherbereich, tauscht jeweils die Worthälften gegeneinander aus (das erste Byte wird mit dem zweiten vertauscht, das dritte mit dem vierten usw.) und schreibt diese vertauschten Bytes in den durch to bezeichneten Speicherbereich. Benutzen Sie swab, wenn Daten zwischen Maschinen ausgetauscht werden sollen, die mit unterschiedlichen Byte-Reihenfolgen arbeiten. nbytes sollte ein geradzahliger Wert sein.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


system, _wsystem

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

int system(const char *command);

int _wsystem(const wchar_t *command);

Beschreibung

Führt einen Betriebssystembefehl aus.

system ruft innerhalb eines ausgeführten C-Programms den Kommandozeileninterpreter des Betriebssystems zur Ausführung eines Befehls, einer Batch-Datei oder eines Programms auf. Dazu wird ihm der String command als Kommandozeile übergeben.

Aufgerufene Programme müssen sich im aktuellen Verzeichnis bzw. in einem in der Umgebungsvariablen PATH aufgeführten Verzeichnis befinden.

Der Kommandozeileninterpreter wird mit Hilfe der Umgebungsvariablen COMSPEC gefunden, so daß sich die Datei des Kommandozeileninterpreters nicht im aktuellen Verzeichnis befinden muß.

Rückgabewert

system liefert einen Wert ungleich null, falls command ein NULL-Zeiger ist und der Kommandozeileninterpreter zur Verfügung steht.

Ist command kein NULL-Zeiger, so liefert, wenn der Kommandozeileninterpreter erfolgreich gestartet wurde, system den Wert 0 zurück.

Bei einem Fehler wird der Wert -1 zurückgeliefert und errno auf einen der folgenden Werte gesetzt:

ENOENT	Pfad/Dateiname nicht gefunden

ENOEXEC	exec-Formatfehler

ENOMEM	Nicht genug Platz im Hauptspeicher


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	 	 	+


tan, tanl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double tan(double x);

long double tanl(long double x);

Beschreibung

 Liefert den Tangens des Arguments.

tan erwartet die Angabe des Winkels in der Einheit rad.

tanl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbehandlung für tan und tanl kann mit _matherr bzw. _matherrl. modifiziert werden.

Rückgabewert

tan und tanl liefern den Tangens von x zurück, d.h. sin(x)/cos(x).


Portabilität

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
tan	+	+	+	+	+	+	+
tanl	+		+	+			+


tanh, tanhl

Siehe auch	Beispiel	Portabilität

Syntax

#include <math.h>

double tanh(double x);

long double tanhl(long double x);

Beschreibung

Liefert den Tangens hyperbolicus des Arguments.

tanh berechnet den Tangens hyperbolicus (sinh(x) / cosh(x)).

tanhl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbehandlung für tanh und tanhl kann mit _matherr bzw. _matherrl modifiziert werden.

Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.

Rückgabewert

tanh und tanhl liefern den Tangens hyperbolicus von x.


Portabiliät

	DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2
tanh	+	+	+	+	+	+	+
tanhl	+		+	+			+


tell

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

long tell(int handle);

Beschreibung

Liefert die aktuelle Position eines Dateizeigers zurück.

tell liefert die aktuelle Position des Dateizeigers in der durch handle bezeichneten Datei in Relation zum Dateianfang (Anzahl der Bytes).

Rückgabewert

tell liefert die aktuelle Position des Dateizeigers innerhalb der angegebenen Datei als long-Wert zurück. Im Fehlerfall wird -1L zurückgeliefert, und die globale Variable errno erhält folgenden Wert:

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_tempnam, _wtempnam

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

char *_tempnam(char *dir, char *prefix)

wchar_t *_wtempnam(wchar_t *dir, wchar_t *prefix)

Beschreibung

Erzeugt einen eindeutigen Dateinamen im angegebenen Verzeichnis.

Die Funktion _tempnam akzeptiert String-Argumente in Form von Einzel- oder Multibyte-Zeichen.

_tempnam erzeugt eindeutige Dateinamen in beliebigen Verzeichnissen. Die zugehörige Datei wird dabei nicht erzeugt - _tempnam gewährleistet nur, daß eine Datei mit diesem Namen noch nicht existiert. _tempnam versucht, in den folgenden Verzeichnissen (in der angegebenen Reihenfolge) einen eindeutigen Dateinamen zu generieren:

In dem durch die Umgebungsvariable TMP angegebenen Verzeichnis.

In dem Verzeichnis, das mit dir an _tempnam übergeben wird.

Im Verzeichnis, das in der P_tmpdir-Definition in stdio.h angegeben ist. Wenn Sie stdio.h bearbeiten und diese Definition ändern, wird die neue Definition von _tempnam nicht verwendet.

Im aktuellen Arbeitsverzeichnis.

Wenn eines der aufgeführten Verzeichnisse NULL, nicht definiert oder nicht vorhanden ist, wird es ignoriert.

Der Parameter prefix enthält den ersten Teil des Dateinamens. Dieser darf nicht länger als fünf Zeichen sein und keinen Punkt (.) enthalten. Durch die Verknüpfung des Verzeichnisnamens mit dem Parameter prefix und 6 zusätzlichen Zeichen wird ein eindeutiger Dateiname erzeugt. Der Speicherplatz für den resultierenden Dateinamen wird mit malloc reserviert. Wenn der Dateiname nicht mehr benötigt wird, sollte die aufrufende Funktion den Speicherplatz durch einen Aufruf von free wieder freigeben.

Im Gegensatz zur Funktion tmpfile löscht _tempnam den Datei nicht. Wenn Sie mit dem über _tempnam erzeugten Namen eine temporäre Datei erstellen, müssen Sie selbst dafür sorgen, die Datei vor dem Ende des Programms wieder zu löschen (z.B. mit remove).

Rückgabewert

Bei fehlerfreier Ausführung liefert _tempnam einen Zeiger auf den eindeutigen Namen einer temporären Datei. Dieser Zeiger kann später (wenn der Dateiname nicht mehr benötigt wird) an free übergeben werden. Wenn tempnam keinen eindeutigen Dateinamen zurückliefern kann, ist das Funktionsergebnis NULL.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


textattr

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void textattr(int newattr);

Beschreibung

Setzt Textattribute.

Hinweis:	Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.

textattr setzt sowohl die Vordergrund- als auch die Hintergrundfarbe für nachfolgende Textausgaben in einem einzigen Funktionsaufruf (vereinigt also die Funktionen textcolor und textbackground).

Diese Funktion läßt bereits auf dem Bildschirm befindliche Zeichen unverändert. Sie verändert nur die Zeichen, die im Textmodus von Funktionen (wie cprintf) direkt auf den Bildschirm ausgegeben werden, nachdem die Funktion aufgerufen wurde.

Die Farbinformation ist im Parameter newattr wie folgt kodiert:

Der 8 Bit Parameter newattr ist folgendermaßen aufgebaut:

ffff ist die 4 Bit-Vordergrundfarbe (0 bis 15).

bbb ist die 3 Bit-Hintergrundfarbe (0 bis 7).

B steuert das Attribut "Blinken"..

Wenn das Attribut "Blinken" eingestellt ist, blinkt das Zeichen. Dies kann durch Hinzufügen der Konstante BLINK geschehen.

Wenn die in conio.h definierten Farbkonstanten zur Zuordnung von Textattributen über textattr verwendet werden sollen, müssen folgende Beschränkungen beachtet werden:

Sie können nur eine der acht ersten Farben für den Hintergrund wählen.

Die Hintergrundfarbe muß um 4 Bitpositionen nach links geschoben werden.

Für Vorder- und Hintergrundfarben sind in conio.h die folgenden symbolischen Konstanten definiert:

Konstante	Wert	Beschreibung	Vorder/Hintergrund

BLACK	0	schwarz	Für beide

BLUE	1	blau	Für beide

GREEN	2	grün	Für beide

CYAN	3	türkis	Für beide

RED	4	rot	Für beide

MAGENTA	5	violett	Für beide

BROWN	6	braun	Für beide

LIGHTGRAY	7	hellgrau	Für beide

DARKGRAY	8	dunkelgrau	Nur für Vordergrund

LIGHTBLUE	9	hellblau	Nur für Vordergrund

LIGHTGREEN	10	hellgrün	Nur für Vordergrund

LIGHTCYAN	11	helltürkis	Nur für Vordergrund

LIGHTRED	12	hellrot	Nur für Vordergrund

LIGHTMAGENTA	13	hellviolett	Nur für Vordergrund

YELLOW	14	gelb	Nur für Vordergrund

WHITE	15	weiß	Nur für Vordergrund

BLINK	128	blinkend	Nur für Vordergrund

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


textbackground

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void textbackground(int newcolor);

Beschreibung

Legt die Hintergrundfarbe für nachfolgende Textausgaben fest.

Hinweis:	Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

textbackground legt die Hintergrundfarbe fest, die im Textmodus direkt auf dem Bildschirm ausgegeben wird. Der Parameter newcolor legt die neue Hintergrundfarbe fest. Er kann auf einen Integerwert zwischen 0 bis 7 oder auf eine der in conio.h definierten symbolischen Konstanten gesetzt werden. Falls Sie symbolische Konstanten verwenden, muß die Header-Datei conio.h eingebunden werden.

Wenn textbackground aufgerufen wurde, verwenden alle folgenden Funktionsaufrufe mit direkter Bildschirmausgabe (wie z.B. cprintf) den Parameter newcolor. Bereits auf dem Bildschirm befindliche Zeichen bleiben unverändert.

Die folgende Tabelle listet die symbolischen Konstanten und die numerischen Werte der verfügbaren Farben auf:

Name	Beschreibung	Wert

BLACK	schwarz	0

BLUE	blau	1

GREEN	grün	2

CYAN	türkis	3

RED	rot	4

MAGENTA	violett	5

BROWN	braun	6

LIGHTGRAY	hellgrau	7

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


textcolor

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void textcolor(int newcolor);

Beschreibung

Legt die Zeichenfarbe für nachfolgende Textausgaben fest.

Hinweis:	Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

textcolor legt die Zeichenfarbe für die Vordergrundfarben fest. Diese Funktion ist für die Ausgabefunktionen auf der Konsole zuständig. newcolor wählt die neue Vordergrundfarbe aus. Sie können newcolor auf einen Integerwert setzen, wie es in der untenstehenden Tabelle beschrieben wird. Sie können newcolor aber auch auf eine der in conio.h definierten symbolischen Konstanten setzen. Falls Sie symbolische Konstanten verwenden, muß die Header-Datei conio.h eingebunden werden.

Wenn textcolor aufgerufen wurde, verwenden alle folgenden Aufrufe von Funktionen mit direkter Bildschirmausgabe (wie z.B. cprintf) den Parameter newcolor. Bereits auf dem Bildschirm befindliche Zeichen bleiben unverändert.

In conio.h sind die folgenden symbolischen Konstanten für die Zeichenfarbe definiert:

Name	Beschreibung	Wert

BLACK	schwarz	0

BLUE	blau	1

GREEN	grün	2

CYAN	türkis	3

RED	rot	4

MAGENTA	violett	5

BROWN	braun	6

LIGHTGRAY	hellgrau	7

DARKGRAY	dunkelgrau	8

LIGHTBLUE	hellblau	9

LIGHTGREEN	hellgrün	10

LIGHTCYAN	helltürkis	11

LIGHTRED	hellrot	12

LIGHTMAGENTA	hellviolett	13

YELLOW	gelb	14

WHITE	weiß	15

BLINK	blinkend	128

Durch Addition des Wertes 128 zur Vordergrundfarbe können Sie Zeichen blinkend darstellen lassen. Zu diesem Zweck wurde auch die Konstante BLINK definiert.

Beispiel:

   textcolor(CYAN + BLINK);

Hinweis:	Nicht alle Farbmonitore reagieren auf das Intensitätsbit, das die Farben 0 bis 7 und 8 bis 15 voneinander unterscheidet. Die hellen Farben 8 bis 15 werden in diesem Fall genauso wie ihre dunklen Äquivalente 0 bis 7 dargestellt. Wie die verschiedenen Farben auf Systemen mit monochromen, LCD- und Plasmabildschirmen dargestellt werden (verschiedene Helligkeitsgrade, spezielle Muster oder Attribute wie Unterstreichung, Fettschrift usw.), hängt von der jeweiligen Hardware ab.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


textmode

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void textmode(int newmode);

Beschreibung

Setzt einen Textmodus.

Hinweis:	Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

textmode setzt einen bestimmten Textmodus.

Sie können den Textmodus über den Parameter newmode mit Hilfe des in conio.h definierten Aufzählungstyps text_modes setzen.

Die am häufigsten benutzten text_modes-Werte sind in der folgenden Tabelle aufgeführt. In conio.h finden Sie einige weitere Werte.

Name	Beschreibung

LASTMODE	Vorheriger Textmodus

BW40	Schwarz-weiß, 40 Spalten

C40	Farbig, 40 Spalten

BW80	Schwarz-weiß, 80 Spalten

C80	Farbig, 80 Spalten

MONO	Schwarz-weiß, 80 Spalten für Monochrom-Adapter bzw. Hercules-Karte

C4350	EGA 43-Zeilen und VGA 50-Zeilen-Modus

Beim Aufruf von textmode wird das aktuelle Fenster auf die gesamte Bildschirmgröße vergrößert und die Textattribute werden wie beim Aufruf von normvideo auf ihre Standardwerte zurückgesetzt.

Ein Aufruf von textmode mit der Konstanten LASTMODE bewirkt, daß der zuletzt verwendete Textmodus aktiviert wird.

textmode sollte generell nur verwendet werden, wenn der Bildschirm bereits im Textmodus ist. Befindet sich der Bildschirm im Grafikmodus, so sollten Sie statt dessen restorecrtmode zum vorübergehenden Umschalten in den Textmodus verwenden.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


time

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

time_t time(time_t *timer);

Beschreibung

Liefert Datum und Uhrzeit des Systems.

time setzt die mit timer übergebene Variable auf die Anzahl der Sekunden, die seit dem 1. Januar 1970, 00:00:00 (Greenwich Mean Time) verstrichen sind, sofern timer kein NULL-Zeiger ist.

Rückgabewert

time gibt die Anzahl der seit dem 1.1.1970 verstrichenen Sekunden zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


tmpfile

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

FILE *tmpfile(void);

Beschreibung

Öffnet eine temporäre Datei im Binärmodus.

tmpfile erzeugt eine temporäre binäre Datei und öffnet sie für Lese- und Schreibzugriffe (w+b). Diese Datei wird beim Schließen bzw. bei Programmende automatisch wieder gelöscht, sofern nicht vorher das Arbeitsverzeichnis gewechselt wurde.

Rückgabewert

tmpfile gibt einen Zeiger auf den Stream der erzeugten Temporärdatei zurück. Wenn die Datei nicht erstellt werden konnte, ist das Funktionsergebnis NULL.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


tmpnam, _wtmpnam

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

char *tmpnam(char *s);

wchar_t *_wtmpnam(wchar_t *s);

Beschreibung

Erzeugt einen eindeutigen Dateinamen.

tmpnam generiert bei jedem Aufruf einen neuen String und kann für die Benennung temporärer Dateien verwendet werden. Die Funktion erzeugt bis zu TMP_MAX verschiedene Dateinamen. TMP_MAX ist in stdio.h mit dem Wert 65535 definiert.

Der Parameter s von tmpnam ist entweder NULL oder ein Zeiger auf ein Array mit mindestens L_tmpnam Zeichen. Die Konstante L_tmpnam ist in stdio.h definiert. Wenn der als s übergebene Zeiger den Wert NULL hat, läßt tmpnam den erzeugten temporären Dateinamen in einem statischen Objekt und liefert einen Zeiger auf dieses Objekt zurück. Wenn s einen Wert ungleich NULL hat, überschreibt tmpnam das interne statische Objekt, kopiert das Ergebnis in das Array, auf das gezeigt wird und das mindestens L_tmpnam Zeichen lang sein muß, und liefert s zurück.

Wenn Sie mit tmpname eine temporäre Datei erzeugen, so liegt das Löschen der Datei (beispielsweise durch einen Aufruf von remove) in Ihrer Verantwortung. Die Datei wird nicht (wie etwa bei tmpfile) automatisch gelöscht.

Rückgabewert

Wenn s den Wert NULL hat, liefert tmpnam einen Zeiger auf ein internes statisches Objekt, ansonsten den Zeiger s zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


toascii

Beispiel	Portabilität

Syntax

#include <ctype.h>

int toascii(int c);

Beschreibung

Konvertiert Zeichen in das ASCII-Format.

toascii ist ein Makro, das den übergebenen Wert c in einen ASCII-Wert umwandelt (durch Löschen aller Bits außer den 7 niederwertigsten). Daraus resultiert ein Wert von 0 bis 127.

Rückgabewert

Das Makro liefert das Ergebnis der Konvertierung von c als Wert zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


_tolower

Beispiel	Portabilität

Syntax

#include <ctype.h>

int _tolower(int ch);

Beschreibung

_tolower ist ein Makro, das wie die Funktion tolower das übergebene Zeichen ch in einen Kleinbuchstaben umwandelt. Im Unterschied zu tolower ist dieses Makro jedoch nur auf Großbuchstaben (A bis Z) anwendbar.

Für _tolower müssen Sie ctype.h einbinden

Rückgabewert

Das Makro liefert als Ergebnis den umgewandelten Wert von ch zurück, falls ch ein Großbuchstabe ist; ansonsten ist das Resultat undefiniert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


tolower, _mbctolower, towlower

Beispiel	Portabilität

Syntax

#include <ctype.h>

int tolower(int ch);

int towlower(wint_t ch);  // Unicode version

#include <mbstring.h>

unsigned int _mbctolower(unsigned int c);

Beschreibung

Wandelt Groß- in Kleinbuchstaben um.

tolower ist eine Funktion, die das als Integerwert übergebene Zeichen ch (ein Wert im Bereich von EOF bis 255) in einen Kleinbuchstaben umwandelt. Alle anderen Zeichen bleiben unverändert.

Rückgabewert

Liefert bei großen Buchstaben den umgewandelten Wert von ch zurück, ansonsten wird das Zeichen unverändert zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_toupper

Beispiel	Portabilität

Syntax

#include <ctype.h>

int _toupper(int ch);

Beschreibung

Wandelt Klein- in Großbuchstaben um.

_toupper ist ein Makro, das, wie toupper, Kleinbuchstaben in Großbuchstaben umwandelt. Allerdings sollte es nur verwendet werden, wenn ch Kleinbuchstaben (a - z) enthält.

_toupper kann nur verwendet werden, wenn die Header-Datei ctype.h eingebunden ist.

Rückgabewert

_toupper liefert den konvertierten Wert von ch zurück, falls ch aus Kleinbuchstaben besteht. Ansonsten ist das Ergebnis undefiniert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


toupper, _mbctoupper, towupper

Beispiel	Portabilität

Syntax

#include <ctype.h>

int toupper(int ch);

int towupper(wint_t ch);  // Unicode version

#include <mbstring.h>

unsigned int _mbctoupper(unsigned int c);

Beschreibung

Wandelt Klein- in Großbuchstaben um.

toupper ist eine Funktion, die das als Integerwert übergebene Zeichen ch (ein Wert im Bereich von EOF bis 255) in einen Großbuchstaben umwandelt.

towupper ist die Unicode-Version von toupper. Es steht zur Verfügung, wenn Unicode definiert ist.

Rückgabewert

Falls ch ein Kleinbuchstabe ist, wird der umgewandelte Wert zurückgeliefert. Ansonsten wird das Zeichen unverändert zurückgegeben.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


_tzset, _wtzset

Siehe auch	Beispiel	Portabilität

Syntax

#include <time.h>

void _tzset(void)

void _wtzset(void)

Beschreibung

Setzt den Wert der globalen Variablen _daylight, _timezone  und _tzname.

tzset ist auf XENIX-Systemen verfügbar.

Die Funktion setzt die globalen Variablen _daylight, _timezone und _tzname gemäß dem Inhalt der Umgebungsvariablen TZ. _wtzset setzt die globalen Variablen _daylight, _timezone und _wtzname. Die Bibliotheksfunktionen ftime und localtime verwenden diese globalen Variablen, um die Greenwich Mean Time (GMT) an die lokale Zeitzone anzupassen. Die Umgebungsvariable TZ muß folgendes Format haben:

   TZ = zzz[+|-]d[d][lll]

Das Feld zzz steht für den Namen der Zeitzone, der aus drei Buchstaben bestehen muß. Beispielsweise könnte der String "PST" zur Darstellung der Pazifischen Standartzeit verwendet werden.

Das ebenfalls obligatorische Feld [+/-]d[d] steht für die Abweichung von der Weltstandardzeit (Greenwich Mean Time: GMT) in Stunden, die durch einen Zahlenwert mit mindestens einer Ziffer (und, falls notwendig, einem Vorzeichen) ausgedrückt wird. Die Verschiebung für Länder westlich des 0. Längengrades wird mit positiven Werten notiert (+5 entspricht beispielsweise der Zeitverschiebung von New York gegenüber Greenwich), für Zeitzonen östlich von Greenwich entstehen negative Werte. (Für die MEZ gilt beispielsweise -1.) Dieser Wert wird zur Berechnung der globalen Variablen _timezone verwendet. _timezone repräsentiert die Zeitdifferenz in Sekunden zwischen der Weltstandardzeit (GMT) und der Ortszeit.

Das Feld lll ist im Gegensatz zu den restlichen Feldern optional; wenn es angegeben ist, muß es aus drei Buchstaben bestehen. Es legt den Namen der lokalen Sommerzeitzone fest. Beispielsweise könnte der String "PDT" verwendet werden, um die pazifische Sommerzeit zu setzen. Wenn dieses Feld vorhanden ist, wird _daylight auf einen Wert ungleich null gesetzt. Wenn dieses Feld nicht vorhanden ist, wird _daylight auf null gesetzt.

Wenn tzset keine Umgebungsvariable TZ findet oder dieser Eintrag nicht den angegebenen Regeln genügt, verwendet die Funktion einen Standardwert; den String Eastern Standard Time Zeitverschiebung +5 Stunden gegenüber GMT, Sommerzeit definiert (TZ = "EST5EDT"), und belegt die globalen Variablen _daylight, _timezone und _tzname mit den entsprechenden Werten. Wenn TZ den Wert null hat, wird auf einem Win32-System keine dieser globalen Variablen gesetzt.

Die globalen Variablen _tzname[0] und _wtzname[1] zeigen auf einen drei Zeichen langen String, der den Namen der anhand der Umgebungsvariable TZ ermittelten Zeitzone enthält. _tzname[1] und _wtzname[1] zeigen auf einen drei Zeichen langen String, der den Namen der Sommerzeitzone aus TZ speichert. Wurde keine Sommerzeitzone angegeben, zeigen _tzname[1] und _wtzname[1] auf einen leeren String.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


ultoa, _ultow

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdlib.h>

char *ultoa(unsigned long value, char *string, int radix);

wchar_t *_ultow(unsigned long value, wchar_t *string, int radix);

Beschreibung

Konvertiert einen Wert vom Typ unsigned long in einen String.

Die Funktion ultoa konvertiert den übergebenen Wert value in einen nullterminierten String und speichert das Ergebnis in der durch string bezeichneten Variablen. ultoa erwartet einen Wert vom Typ unsigned long in value.

Der Parameter radix legt die Basis fest, zu der die Konvertierung stattfinden soll. Zulässig sind Werte von 2 bis 36. ultoa prüft nicht auf Überlauf. Wenn radix den Wert 10 hat und value kleiner als null ist, stellt ultoa dem Ergebnis kein Minuszeichen voran.

Hinweis:	Der durch string übergebene String muß in allen Fällen lang genug sein, um das Ergebnis der Konvertierung inklusive des abschließenden Nullzeichens (\0) aufnehmen zu können. ultoa kann maximal 33 Byte zurückgeben.

Rückgabewert

Die Funktion liefert string zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


umask

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

unsigned umask(unsigned mode);

Beschreibung

Setzt das Bitfeld für Dateizugriffe (Lese- und Schreiboperationen).

umask setzt das Bitfeld, das bei Aufrufen von open und create verwendet wird. Die in mode gesetzten Bits werden in den Zugriffsberechtigungen aller nachfolgend mit create und open erzeugten Dateien gelöscht.

Der Parameter mode kann über die folgenden symbolischen Konstanten festgelegt werden, die in sys\stat.h definiert sind:

Wert von mode	Zugriffsberechtigung

S_IWRITE	Schreiben

S_IREAD	Lesen

S_IREAD|S_IWRITE	Lesen und Schreiben

Rückgabewert

Es wird der vorherige Wert von mask zurückgeliefert. Ein Fehlerwert existiert nicht.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


ungetc, ungetwc

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int ungetc(int c, FILE *stream);

wint_t ungetwc(wint_t c, FILE *stream);

Beschreibung

Stellt ein aus einem Stream gelesenes Zeichen wieder zurück.

Hinweis:	Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.

ungetc stellt ein Zeichen für eine erneute Leseoperation zurück in den Eingabe-Stream stream, der für Leseoperationen geöffnet sein muß. Dieses Zeichen wird dann beim nächsten Aufruf von getc oder fread, der sich auf den betreffenden Eingabe-Stream bezieht, zurückgeliefert. Es kann immer nur ein Zeichen zurückgestellt werden. Ein zweiter Aufruf von ungetc ohne ein dazwischenliegendes getc überschreibt das zuvor zurückgestellte Zeichen. Die Anwendung von fflush, fseek, fsetpos oder rewind auf eine Datei löscht deren Puffer und damit auch alle eventuell mit ungetc zurückgestellten Zeichen.

Rückgabewert

ungetc liefert bei fehlerfreier Ausführung das zurückgestellte Zeichen zurück.

Bei einem Fehler wird EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


ungetch

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int ungetch(int ch);

Beschreibung

Stellt ein von der Tastatur gelesenes Zeichen in den Tastaturpuffer zurück.

Hinweis:	Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.

ungetch stellt das Zeichen ch für die nächste tastaturbezogene Leseoperation zurück. Es kann nur jeweils ein Zeichen gespeichert werden. Wird ungetch mehr als einmal vor dem nächsten Lesezugriff aufgerufen, liefert die Funktion einen Fehler.

Rückgabewert

Die Funktion liefert das Zeichen ch zurück.

Bei einem Fehler wird EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	 	 	+


unixtodos

Siehe auch	Beispiel	Portabilität

Syntax

#include <dos.h>

void unixtodos(long time, struct date *d, struct time *t);

Beschreibung

Konvertiert Datum und Uhrzeit aus dem UNIX- in das DOS-Format.

unixtodos konvertiert Datum und Uhrzeit vom UNIX-Format zum DOS-Format und setzt die Strukturen des Typs date bzw. time, auf die die Parameter d und t zeigen.

time muß eine Zeitangabe nach dem 1. Januar 1980 00:00:00 darstellen.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_unlink, _wunlink

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int _unlink(const char *filename);

int _wunlink(const wchar_t *filename);

Beschreibung

Löscht eine Datei.

unlink löscht die durch filename angegebene Datei. Als filename kann jeder Laufwerksbezeichner, jeder Pfad und Dateiname verwendet werden. Die Jokerzeichen * und ? sind in filename nicht erlaubt.

Schreibgeschützte Dateien können mit unlink nicht gelöscht werden. Um eine schreibgeschützte Datei zu löschen, muß zuerst das entsprechende Attribut mit chmod oder _rtl_chmod entfernt werden.

Hinweis:	Eine geöffnete Datei muß vor dem Löschen geschlossen werden.

_wunlink ist die Unicode-Version von _wunlink. Die Unicode-Version akzeptiert einen Dateinamen in Form einer wchar_t-Zeichenfolge. Ansonsten besteht kein Unterschied zwischen den Funktionen.

Rückgabewert

Bei fehlerfreier Ausführung liefert unlink den Wert 0 zurück.

Bei einerm Fehler ist das Funktionsergebnis -1, und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


unlock

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int unlock(int handle, long offset, long length);

Beschreibung

Entfernt mit lock gesetzte Sperren bei Dateien im gemeinsamen Zugriff.

unlock ist eine Schnittstelle zu den Betriebssystemmechanismen für gemeinsame Dateizugriffe. unlock gibt einen vorher mit lock gesperrten Dateibereich wieder frei. Zur Vermeidung von Fehlern müssen vor dem Schließen der Datei sämtliche Bereiche entsperrt werden. Ein Programm muß alle Sperren aufheben, bevor die Ausführung beendet wird.

Rückgabewert

Die Funktion liefert bei fehlerfreier Ausführung den Wert 0 zurück.

Ansonsten wird der Wert -1 zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


_utime, _wutime

Siehe auch	Beispiel	Portabilität

Syntax

#include <utime.h>

int _utime(char *path, struct utimbuf *times);

int _wutime(wchar_t *path, struct _utimbuf *times);

Beschreibung

Setzt Datum und Uhrzeit einer Datei.

_utime setzt die Änderungszeit für die durch path angegebene Datei. Die Änderungszeit ist in der durch times übergebenen Struktur vom Typ _utimbuf enthalten. Diese Struktur ist in utime.h definiert und hat das folgende Format:

   struct utimebuf {

     time_t actime;        /* Zugriffszeit */

     time_t modtime;       /* Änderungszeit */

     };

Das FAT-Dateisystem (File Allocation Table) unterstützt nur die Änderungszeit. Im FAT-Dateisystem wird actime daher bei einem Aufruf von _utime ignoriert und nur modtime zum Setzen der Änderungszeit verwendet.

Hat times den Wert NULL, wird die Änderungszeit der Datei auf die aktuelle Uhrzeit gesetzt.

_wutime ist die Unicode-Version von _utime. Die Unicode-Version akzeptiert einen Dateinamen in Form einer wchar_t-Zeichenfolge. Ansonsten besteht kein Unterschied zwischen den Funktionen.

Rückgabewert

utime liefert bei fehlerfreier Ausführung den Wert 0 zurück.

Bei einem Fehler wird -1 zurückgeliefert und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

EMFILE	Zu viele Dateien bereits offen

ENOENT	Pfad/Datei nicht gefunden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


va_arg, va_end, va_start

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdarg.h>

void va_start(va_list ap, lastfix);

type va_arg(va_list ap, type);

void va_end(va_list ap);

Beschreibung

Makros für Funktionen mit variabler Parameterzahl.

Verschiedene C-Funktionen (wie vfprintf und vprintf) sind in der Lage, zusätzlich zu einem oder mehreren obligatorischen (bekannten) Parameter variable Argumentlisten zu verarbeiten. Die Makros va_arg, va_end und va_start stellen eine portable Schnittstelle dar, um auf diese Argumentlisten zuzugreifen. Sie werden benutzt, um eine Liste von Argumenten abzuarbeiten, wenn die aufgerufene Funktion die Anzahl und die Typen der übergebenen Parameter nicht kennt.

In der Header-Datei stdarg.h sind ein Typ (va_list) und drei Makros (va_start, va_arg und va_end) deklariert:

va_list ist der Array-Typ, der die von va_arg und va_end benötigten Informationen speichert. Wenn eine aufgerufene Funktion eine variable Argumentliste übernimmt, deklariert sie eine Variable ap vom Typ va_list.

va_start ist ein Makro, das ap auf den ersten variablen Parameter setzt, der der Funktion übergeben wird. va_start muß vor va_arg und va_end aufgerufen werden.

va_start nimmt zwei Parameter: ap und lastfix (ap ist unter va_list im vorhergehenden Absatz beschrieben; lastfix ist der Name des letzten festgelegten Parameters, der zu der aufgerufenen Funktion übergeben wird).

Das Makro va_arg erwartet einen Zeiger ap sowie einen Variablentyp (type), interpretiert den jeweils nächsten variablen Parameter der Funktion als Wert des angegebenen Typs und liefert ihn zurück. Die Variable ap von va_arg sollte die gleiche Variable ap sein, die bereits va_start initialisierte.

Hinweis:	Mit dem Parameter va_arg dürfen nicht die Datentypen char, unsigned char oder float verwendet werden.

Der erste Aufruf von va_arg liefert den Wert des ersten variablen Parameters zurück und erhöht ap entsprechend, so daß ap danach auf den nächsten Parameter zeigt. Weitere Aufrufe von va_arg - wieder mit ap - liefern die jeweils nachfolgenden Parameter zurück. Das wird realisiert, indem zuerst ap dereferenziert und dann so erhöht wird, das es auf den nächsten Eintrag zeigt. Jedes sukzessive Mal, bei den va_arg angewendet wird, verändert es ap, so daß es auf das nächste Argument in der Liste zeigt.

Das Makro va_end hilft der aufgerufenen Funktion, einen normalen Rücksprung durchzuführen. va_end kann ap so verändern, daß vor einer erneuten Verwendung wieder va_start aufgerufen werden muß. va_end sollte aufgerufen werden, nachdem va_arg alle Argumente abgearbeitet hat; wird dies unterlassen, resultiert daraus unter Umständen ein undefiniertes Verhalten des Programms.

Rückgabewert

va_start und va_end haben keinen Rückgabewert, va_arg liefert den aktuellen Parameter in der Liste zurück (den Parameter, auf den ap zeigt).


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


vfprintf, vfwprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int vfprintf(FILE *stream, const char *format, va_list arglist);

int vfwprintf(FILE *stream, const wchar_t *format, va_list arglist);

Beschreibung

Schreibt formatierte Ausgabe in einen Stream.

Die v...printf-Funktionen stellen eine Alternative zu den entsprechenden ...printf-Funktionen dar. Sie verhalten sich exakt wie ihre ...printf-Gegenstücke, übernehmen jedoch als Parameter anstelle einer Argumentliste einen Zeiger auf eine Argumentliste.

Detaillierte Informationen über Formatierungsanweisungen finden Sie unter printf-Formatierungsanweisung.

vfprintf übernimmt einen Zeiger auf eine Reihe von Argumenten, wendet auf jedes Argument eine Formatierungsanweisung an, die in dem durch format gegebenen Format-String enthalten ist, und schreibt die formatierten Daten in den durch stream bezeichneten Stream. Die Anzahl der Argumente und Formatierungsanweisungen muß identisch sein.

Rückgabewert

Die Funktion liefert die Anzahl der ausgegebenen Bytes zurück.

Bei einem Fehler liefert vfprint EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


vfscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdio.h>

int vfscanf(FILE *stream, const char *format,va_list arglist);

Beschreibung

Durchsucht und formatiert die Eingabe aus einem Stream.

Die v...scanf-Funktionen stellen eine Alternative zu den entsprechenden ...scanf-Funktionen dar. Sie verhalten sich exakt wie ihre ...scanf-Gegenstücke, übernehmen jedoch als Parameter anstelle einer Argumentliste einen Zeiger auf eine Argumentliste.

Detaillierte Informationen über Formatierungsanweisungen finden Sie unter scanf-Formatierungsanweisungen.

vfscanf liest eine Reihe von Eingabefeldern zeichenweise aus dem durch stream angegebenen Stream. Auf jedes Feld wird dann die entsprechende Formatierungsanweisung angewendet, die vfscanf über den Zeiger format auf den Format-String übergeben wurde. Der Format-String legt die Anzahl der Eingaben und ihr Format fest. Gelesene Eingaben werden an den Adressen, die in den format nachfolgenden Parametern angegeben werden, gespeichert. Die Anzahl der Eingabefelder muß mit der Anzahl der Formatierungsanweisungen und Adressen übereinstimmen. Es ist möglich, daß vfscanf das Einlesen eines bestimmten Feldes vorzeitig - d.h. bevor das Feldende (markiert durch ein Whitespace-Zeichen) erreicht ist - abbricht bzw. den Lesevorgang komplett beendet. In der Beschreibung zu scanf werden die Gründe hierfür erläutert.

Rückgabewert

vfscanf liefert die Anzahl der fehlerfrei gelesenen und gespeicherten Felder zurück. Nicht gezählt werden hierbei Felder, die nur gelesen, nicht aber gespeichert wurden. Wenn überhaupt keine Zuweisungen erfolgt sind, liefert vfscanf den Wert 0.

Beim Versuch, über das Ende einer Datei hinaus zu lesen, liefert vfscanf Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


vprintf, vfwprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdarg.h>

int vprintf(const char *format, va_list arglist);

int vwprintf(const wchar_t *format, va_list arglist);

Beschreibung

Liefert formatierte Ausgabe nach stdout.

Hinweis:	Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.

Die v...printf-Funktionen stellen eine Alternative zu den entsprechenden ...printf-Funktionen dar. Sie verhalten sich exakt wie ihre ...printf-Gegenstücke, übernehmen jedoch als Parameter anstelle einer Argumentliste einen Zeiger auf eine Argumentliste.

Detaillierte Informationen über Formatierungsanweisungen finden Sie unter printf-Formatierungsanweisung.

vprintf akzeptiert einen Zeiger auf ein Reihe von Argumenten, wendet auf jedes Argument eine Formatierungsanweisung an, die in dem durch format angegebenen Format-String enthalten ist, und schreibt die formatierten Daten nach stdout. Die Anzahl der Argumente muß mit der der Formatierungsanweisungen übereinstimmen.

Hinweis: 	Wenn Sie das Flag SS!=DS bei 16-Bit Anwendungen verwenden, geht vprintf davon aus, daß sich die übergebene Adresse im SS-Segment befindet.

Rückgabewert

Die Funktion liefert die Anzahl der ausgegebenen Zeichen zurück. Bei einem Fehler liefert vprintf den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	 	+	+	 	+


vscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdarg.h>

int vscanf(const char *format, va_list arglist);

Beschreibung

Durchsucht und formatiert Eingaben von stdin.

Hinweis:	Benutzen Sie diese Funktion nicht für Win32s oder Win32-GUI-Anwendungen.

Die v...scanf-Funktionen stellen eine Alternative zu den entsprechenden ...scanf-Funktionen dar. Sie verhalten sich exakt wie ihre ...scanf-Gegenstücke, übernehmen jedoch als Parameter anstelle einer Argumentliste einen Zeiger auf eine Argumentliste.

Detaillierte Informationen über Formatierungsanweisungen finden Sie unter scanf-Formatierungsanweisung.

vscanf liest eine Reihe von Eingabefeldern zeichenweise aus stdin. Auf jedes Feld wird dann die entsprechende Formatierungsanweisung angewendet, die vscanf über den Zeiger format auf den Format-String übergeben wurde. Der Format-String legt die Anzahl der Eingaben und ihr Format fest. Gelesene Eingaben werden an den Adressen, die in den format nachfolgenden Parametern angegeben werden, gespeichert. Nach der Analyse der ersten Formatierungsanweisung wird ein Eingabefeld gelesen, konvertiert und an der entsprechenden Adresse gespeichert. Die Anzahl der Eingabefelder muß mit der Anzahl der Formatierungsanweisungen und Adressen übereinstimmen.

Es ist möglich, daß vscanf das Einlesen eines bestimmten Feldes vorzeitig - d.h. bevor das Feldende (markiert durch ein Whitespace-Zeichen) erreicht ist - abbricht bzw. den Lesevorgang komplett beendet. In der Beschreibung zu scanf werden die Gründe hierfür erläutert.

Rückgabewert

vscanf liefert die Anzahl der fehlerfrei gelesenen, konvertierten und gespeicherten Felder zurück, wobei Felder, die nur gelesen aber nicht gespeichert wurden, nicht gezählt werden. Wenn überhaupt keine Zuweisungen erfolgt sind, ist der Rückgabewert 0.

Beim Versuch, über das Ende der Datei hinauszulesen, liefert vscanf den Wert EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


vsprintf, vswprintf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdarg.h>

int vsprintf(char *buffer, const char *format, va_list arglist);

int vswprintf(wchar_t *buffer, const wchar_t *format, va_list arglist);

Beschreibung

Schreibt formatierte Ausgabe in einen String.

Die v...printf-Funktionen stellen eine Alternative zu den entsprechenden ...printf-Funktionen dar. Sie verhalten sich exakt wie ihre ...printf-Gegenstücke, übernehmen jedoch als Parameter anstelle einer Argumentliste einen Zeiger auf eine Argumentliste.

Detaillierte Informationen über Formatierungsanweisungen finden Sie unter printf-Formatierungsanweisung.

vsprintf akzeptiert einen Zeiger auf ein Reihe von Argumenten, wendet auf jedes Argument eine Formatierungsanweisung an, die in dem durch format angegebenen Format-String enthalten ist, und schreibt die formatierten Daten in einen String. Die Anzahl der Argumente muß mit der der Formatierungsanweisungen übereinstimmen.

Rückgabewert

Die Funktion liefert die Anzahl der ausgegebenen Zeichen zurück. Bei einem Fehler liefert vsprintf EOF zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


vsscanf

Siehe auch	Beispiel	Portabilität

Syntax

#include <stdarg.h>

int vsscanf(const char *buffer, const char *format, va_list arglist);

Beschreibung

Durchsucht und formatiert Eingaben aus einem Stream.

Die v...scanf-Funktionen stellen eine Alternative zu den entsprechenden ...scanf-Funktionen dar. Sie verhalten sich exakt wie ihre ...scanf-Gegenstücke, übernehmen jedoch als Parameter anstelle einer Argumentliste einen Zeiger auf eine Argumentliste.

Detaillierte Informationen über Formatierungsanweisungen finden Sie unter scanfi-Formatierungsanweisung.

vsscanf liest eine Reihe von Eingabefeldern zeichenweise aus einem Stream. Auf jedes Feld wird dann die entsprechende Formatierungsanweisung angewendet, der vsscanf über den Zeiger format auf den Format-String übergeben wurde. Der Format-String legt die Anzahl der Eingaben und ihr Format fest. Gelesene Eingaben werden an den Adressen, die in den format nachfolgenden Parametern angegeben werden, gespeichert. Nach der Analyse der ersten Formatierungsanweisung wird ein Eingabefeld gelesen, konvertiert und an der entsprechenden Adresse gespeichert. Die Anzahl der Eingabefelder muß der Anzahl der Formatierungsanweisungen und Adressen entsprechen.

Es ist möglich, daß vsscanf das Einlesen eines bestimmten Feldes vorzeitig - d.h. bevor das Feldende (markiert durch ein Whitespace-Zeichen) erreicht ist - abbricht bzw. den Lesevorgang komplett beendet. In der Beschreibung zu scanf werden die Gründe hierfür erläutert.

Rückgabewert

vsscanf liefert die Anzahl der fehlerfrei gelesenen, konvertierten und gespeicherten Felder zurück, wobei Felder, die zwar gelesen, nicht aber gespeichert wurden, nicht mitgezählt werden. Wenn überhaupt keine Zuweisungen erfolgt sind, ist der Rückgabewert 0.

Beim Versuch, über das Ende des Strings hinauszulesen, wird der Wert EOF zurückgeliefert.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


wait

Siehe auch	Portabilität

Syntax

#include <process.h>

int wait(int *statloc);

Beschreibung

Wartet auf das Ende von untergeordneten Prozessen.

Die Funktion wait wartet auf das Ende eines oder mehrerer untergeordneter Prozesse. Die untergeordneten Prozesse müssen vom aufrufenden Programm selbst erzeugt worden sein, denn wait kann nicht auf Enkelprozesse (Prozesse, die von untergeordneten Prozessen erzeugt wurden) warten. Enthält der Parameter statloc einen Wert ungleich NULL, dann wird an dieser Adresse der Beendigungs-Status des untergeordneten Prozesses gespeichert.

Bei normaler Beendigung des untergeordneten Prozesses (durch Aufruf von exit oder Rücksprung von main) ist das Statuswort folgendermaßen definiert

Bit 0-7	Null

Bit 8-15	Das niederwertige Byte des Rückgabewerts des untergeordneten Prozesses. Das ist der durch exit oder den Rücksprung aus main erhaltene Wert. Wird der untergeordnete Prozeß durch einfachen Rücksprung aus main (ohne Wert) verlassen, so ist der Inhalt dieser Bits unbestimmt. Wird der untergeordnete Prozeß nicht normal beendet, dann ist das Statuswort wie folgt definiert:

Bits 0-7	 Information über die Beendigung des untergeordneten Prozesses

1	Abbruch durch kritischen Fehler

2	Ausführungsfehler, Schutzverletzung

3	Externes Abbruchsignal

Bits 8-15	Null

Rückgabewert

Bei einer normalen Beendigung des untergeordneten Prozesses liefert wait die Prozeß-ID des untergeordneten Prozesses zurück.

Bei einer anormalen Beendigung des untergeordneten Prozesses liefert die Funktion den Wert -1 an den übergeordneten Prozeß zurück und setzt errno auf EINTR.

Wenn wait zurückkehrt, ohne daß ein untergeordneter Prozeß beendet wurde, so liefert die Funktion den Wert -1 zurück und setzt errno auf:

ECHILD	Kein untergeordneter Prozeß vorhanden


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	 	 	+	 	 	+


wcstombs

Beispiel	Portabilität

Syntax

#include <stdlib.h>

size_t wcstombs(char *s, const wchar_t *pwcs, size_t n);

Beschreibung

Konvertiert ein wchar_t-Array in einen Multibyte-String.

wcstombs konvertiert die über pcws angegebenen Elemente des Typs wchar_t in den Multibyte-String s. Die Konvertierung wird beendet, wenn wcstombs auf ein Nullzeichen oder ein ungültiges Multibyte-Zeichen trifft.

Der Parameter n legt fest, wieviele Bytes maximal konvertiert werden. Wenn die betreffende Anzahl Bytes konvertiert und kein Nullzeichen angetroffen wurde, ist das Array s nicht nullterminiert.

Das Verhalten von wcstombs ist von der Kategorie LC_CTYPE der aktuellen locale-Einstellung abhängig.

Rückgabewert

wcstombs liefert (size_t)-1 zurück, wenn es auf ein ungültiges Multibyte-Zeichen trifft. Andernfalls wird die Anzahl der geänderten Bytes zurückgeliefert. (Nicht enthalten ist darin das abschließende Zeichen, falls vorhanden.)


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


wctomb

Beispiel	Portabilität

Syntax

#include <stdlib.h>

int wctomb(char *s, wchar_t wc);

Beschreibung

Konvertiert einen Wert des Typs wchar_t in ein Multibyte-Zeichen.

Ist s ungleich null, stellt wctomb die Anzahl der Bytes fest, die zur Darstellung des durch wc angegebenen Multibyte-Zeichens erforderlich sind (einschließlich vom Status der Umschalttasten abhängiger Codierungen). Das Multibyte-Zeichen wird in s gespeichert. Maximal werden MB_CUR_MAX Zeichen gespeichert. Hat wc den Wert null, behält wctomb den ursprünglichen Zustand bei.

Das Verhalten von wctomb ist von der Kategorie LC_CTYPE der aktuellen locale-Einstellung abhängig.

Rückgabewert

Ist s ein NULL-Zeiger, so liefert wctomb einen Wert ungleich Null, wenn die Multibyte-Zeichen statusabhängige Codierungen enthalten. Sind keine statusabhängigen Codierungen enthalten, so wird 0 zurückgeliefert.

Ist s kein NULL-Zeiger, so liefert wctomb den Wert -1 zurück, wenn wc kein gültiges Multibyte-Zeichen enthält. Ansonsten liefert wctomb die Anzahl der Bytes des durch wc angegebenen Multibyte-Zeichens zurück. Der Rückgabewert ist nie größer als der Wert von MB_CUR_MAX.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	+	+	+


wherex

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int wherex(void);

Beschreibung

Liefert die Spaltenposition des Cursor innerhalb eines Fensters zurück.

Hinweis:	Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

wherex liefert die x-Koordinate der Cursor-Position zurück (im aktuellen Textfenster).

Rückgabewert

wherex liefert einen Integerwert im Bereich von 1 bis zur Anzahl der Spalten im aktuellen Videomodus zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


wherey

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

int wherey(void);

Beschreibung

Liefert die aktuelle Zeile der Cursor-Position innerhalb eines Fensters zurück.

Hinweis:	Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

wherey liefert die y-Koordinate der Cursor-Position zurück (im aktuellen Textfenster).

Rückgabewert

wherey liefert einen Integerwert im Bereich von 1 bis zur Anzahl der Zeilen im aktuellen Videomodus zurück.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


window

Siehe auch	Beispiel	Portabilität

Syntax

#include <conio.h>

void window(int left, int top, int right, int bottom);

Beschreibung

Definiert einen Bereich des Bildschirms als Textfenster.

Hinweis:	Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.

window definiert einen rechteckigen Bereich des Bildschirms als Textfenster. Wenn die angegebenen Koordinaten ungültig sind, wird der Aufruf der Funktion ignoriert.

left und top bestimmen die obere linke Ecke des Fensters.

right und bottom sind die Bildschirmkoordinaten der rechten unteren Ecke.

Die Minimalgröße des Textfensters ist ein Rechteck aus einer Spalte und einer Zeile. Die Standardgröße ist der gesamte Bildschirm mit folgenden Koordinaten:

  1,1,Sp,Ze

Sp ist hierbei die Anzahl der Spalten im aktuellen Videomodus, während Ze die Anzahl der Zeilen angibt.

Rückgabewert

Keiner.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	 	+	 	 	+


Siehe auch

lseek

_rtl_read

write


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	 	+	+	 	 	+


write

Siehe auch	Beispiel	Portabilität

Syntax

#include <io.h>

int write(int handle, void *buf, unsigned len);

Beschreibung

Schreibt Daten in eine Datei.

write liest len Bytes ab der durch buf angegebenen Adresse aus dem Speicher und schreibt sie in die durch handle bezeichnete Datei. handle ist ein Datei-Handle, das man durch einen Aufruf von creat, open, dup oder dup2 erhält.

Mit Ausnahme von Textdateien entspricht die Anzahl der in die Datei geschriebenen Bytes dem durch den Parameter len angegebenen Wert. Mit write können maximal UINT_MAX-1 Bytes geschrieben werden, da UNIT_MAX dem Wert -1 entspricht, dem Fehlerindikator von write. UINT_MAX ist in limits.h definiert. Wenn die Datei im Textmodus geöffnet wurde und write auf ein Zeilenvorschubzeichen trifft, so wird die Zeichenfolge CR/LF ausgegebenUINT_MAX ist definiert in limits.h.

Ist die Anzahl der tatsächlich geschriebenen Bytes kleiner als len, so ist dies ein Fehler und bedeutet wahrscheinlich, daß die Diskette oder Festplatte voll ist. Bei Diskettendateien schreibt write ab der aktuellen Position des Dateizeigers, bei Gerätedateien wird direkt zum jeweiligen Gerät geschrieben. Wenn die Datei mit O_APPEND (anhängen) geöffnet wurde, setzt write, bevor der Schreibvorgang beginnt, den Dateizeiger automatisch auf das Dateiende.

Rückgabewert

Die Funktion write liefert die Anzahl der tatsächlich geschriebenen Bytes zurück. Wenn write in eine Textdatei schreibt, werden die Zeilenvorschübe nicht mitzählt. Bei einem Fehler wird der Wert -1 zurückgeliefert, und errno erhält einen der folgenden Werte:

EACCES	Zugriff nicht gestattet

EBADF	Ungültiges Handle


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

+	+	+	+	 	 	+


Beispiel abs
/* Beispiel abs */

#include <stdio.h>

#include <math.h>

int main(void)

{

  int number = -1234;

  printf("number: %d  absolute value: %d\n", number, abs(number));

  return 0;

}


Beispiel cabs
/* Beispiel cabs */

#include <stdio.h>

#include <math.h>

#ifdef __cplusplus

  #include <complex.h>

#endif

#ifdef __cplusplus /* Falls C++, Klasse complex verwenden */

  void print_abs(void)

  {

    complex z(1.0, 2.0);

    double  absval;

    absval = abs(z);

    printf("The absolute value of %.2lfi %.2lfj is %.2lf",

      real(z), imag(z), absval);

  }

#else  /* Funktion unten ist für C (und nicht für C++) */

  void print_abs(void)

  {

    struct complex z;

    double absval;

    z.x = 2.0;

    z.y = 1.0;

    absval = cabs(z);

    printf("The absolute value of %.2lfi %.2lfj is %.2lf",

      z.x, z.y, absval);

  }

#endif

int main(void)

{

  print_abs();

  return 0;

}


Beispiel fabs
/* Beispiel fabs */

#include <stdio.h>

#include <math.h>

int main(void)

{

   float  number = -1234.0;

   printf("number: %f  absolute value: %f\n", number, fabs(number));

   return 0;

}


Beispiel labs
/* Beispiel labs */

#include <stdio.h>

#include <math.h>

int main(void)

{

   long result;

   long x = -12345678L;

   result= labs(x);

   printf("number: %ld abs value: %ld\n", x, result);

   return 0;

}


Beispiel acos
/* Beispiel acos */

#include <stdio.h>

#include <math.h>

int main(void)

{

  double result;

  double x = 0.5;

  result = acos(x);

  printf("The arc cosine of %lf is %lf\n", x, result);

  return 0;

}


Beispiel asin
/* Beispiel asin */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result;

   double x = 0.5;

   result = asin(x);

   printf("The arc sin of %lf is %lf\n", x, result);

  return(0);

}


Beispiel atan
/* Beispiel atan */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result;

   double x = 0.5;

   result = atan(x);

   printf("The arc tangent of %lf is %lf\n", x, result);

return(0);

}


Beispiel atan2
/* Beispiel atan2 */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result;

   double x = 90.0, y = 45.0;

   result = atan2(y, x);

   printf("The arc tangent ratio of %lf is %lf\n", (y / x), result);

   return 0;

}


Beispiel alloca
/* Beispiel alloca */

#include <malloc.h>

#include <stdio.h>

#include <stdlib.h>

void test(int a)

{

   char *newstack;

   int len = a;

   char dummy[1];

dummy[0] = 0;         /* Erzwinge einen guten Stack-Frame */

   printf("SP before calling alloca(0x%X) = 0x%X\n",len,_SP);

   newstack = (char *) alloca(len);

printf("SP after calling alloca = 0x%X\n",_SP);

   if (newstack)

      printf("Alloca(0x%X) returned %p\n",len,newstack);

   else

      printf("Alloca(0x%X) failed\n",len);

}

void main()

{

   test(256);

   test(16384);

}


Beispiel asctime
/* Beispiel asctime */

#include <string.h>

#include <time.h>

#include <stdio.h>

int main(void)

{

  struct tm t;

  char str[80];

  /* Beispiel für das Laden der Struktor tm */

  t.tm_sec    = 1;  /* Sekunden */

  t.tm_min    = 30; /* Minuten */

  t.tm_hour   = 9;  /* Stunden */

  t.tm_mday   = 22; /* Tag des Monats */

  t.tm_mon    = 11; /* Monat */

  t.tm_year   = 56; /* Jahr - schließt Zahrhundert nicht mit ein */

  t.tm_wday   = 4;  /* Wochentag */

  t.tm_yday   = 0;  /* Anzeige nicht in asctime */

  t.tm_isdst  = 0;  /* SavTime des Tages; Anzeige nicht in asctime */

  /* Wandelt eine Struktur in einen nullterminierten String um */

  strcpy(str, asctime(&t));

  printf("%s\n", str);

  return 0;

}


Beispiel ctime
/* Beispiel ctime */

#include <stdio.h>

#include <time.h>

int main(void)

{

  time_t t;

  time(&t);

  printf("Today's date and time: %s\n", ctime(&t));

  return 0;

}


Beispiel _beginthread
/* Beispiel _beginthread */

#include <stdio.h>

#include <errno.h>

#include <stddef.h>     /* Variable _threadid */

#include <process.h>    /* _beginthread, _endthread */

#include <time.h>       /* time, _ctime */

void thread_code(void *threadno)

{

    time_t t;

    time(&t);

    printf("Executing thread number %d, ID = %d, time = %s\n",

        (int)threadno, _threadid, ctime(&t));

    _endthread();

}

void start_thread(int i)

{

    int thread_id;

#if     defined(__WIN32__)

    if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == (unsigned long)-1)

#else

    if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == -1)

#endif

    {

        printf("Unable to create thread %d, errno = %d\n",i,errno);

        return;

    }

    printf("Created thread %d, ID = %ld\n",i,thread_id);

}

int main(void)

{

    int i;

    for (i = 1; i < 20; i++)

        start_thread(i);

    printf("Hit ENTER to exit main thread.\n");

    getchar();

    return 0;

}


Beispiel _beginthreadNT
/* Beispiel beginthreadNT */

#include        <windows.h>

#include        <process.h>

#include        <stdio.h>

#include        <conio.h>

/*      Diese Funktion agiert als Hauptfunktion für jeden neuen thread.

static  void    threadMain(void *arg) */

{

        printf("Thread %2d has an ID of %u\n", (int)arg, GetCurrentThreadId());

        _endthread();

}

int     main(void)

{

        #define NTHREADS        25

        HANDLE  hThreads[NTHREADS];

        int     i;

        //      Erzeuge NTHREADS vererbbare Threads, die als unterbrochen initiiert sind

        //      und die ablaufen, wenn sie bei threadMain() gestartet werden.

        //      Bei threadMain().

        for     (i = 0; i < NTHREADS; i++)

        {

                SECURITY_ATTRIBUTES     sa =

                {

                        sizeof(SECURITY_ATTRIBUTES),    // Größe der Strukture

                        0,                              // Kein Deskriptor zur Sicherheit

                        TRUE,                           // Handle des Threads ist erbbar

                };

                DWORD   threadId;

                hThreads[i] = (HANDLE)_beginthreadNT(

                                        threadMain,             // Startadresse des Threads

                                        4096,                   // Stack-Größe des Threads

                                        (void *)i,              // Startargument des Threads

                                        &sa,                    // Sicherheit des Threads

                                        CREATE_SUSPENDED,       // Erzeuge im unterbrochenen
                                                              // Zustand

                                        &threadId);             // ID des Threads.

                if      (hThreads[i] == INVALID_HANDLE_VALUE)

                {

                        MessageBox(0, "Thread Creation Failed", "Error", MB_OK);

                        return  1;

                }

                printf("Created thread %2d with an ID of %u\n", i, threadId);

        }

        printf("\nPress a key to thaw all threads\n\n");

        getch();

        //      Wiederaufnehmen des unterbrochenen Threads.

        for     (i = 0; i < NTHREADS; i++)

                ResumeThread(hThreads[i]);

        //      Warten auf alle Threads, um die Ausführung zu beenden.

        WaitForMultipleObjects(NTHREADS,        // Anzahl der Objekte, auf die gewartet werden
                                              // soll

                               hThreads,        // Objekte, auf die gewartet werden soll

                               TRUE,            // Warten auf alle Objekte

                               INFINITE);       // Keine Auszeit

        //      Schließen aller Thread-Handles.

        for     (i = 0; i < NTHREADS; i++)

                CloseHandle(hThreads[i]);

        return  0;

}


Beispiel biosequip
/* Beispiel biosequip */

#include <bios.h>

#include <stdio.h>

#define CO_PROCESSOR_MASK 0x0002

int main(void)

{

  int equip_check;

   /* erhält die aktuell eingerichtete Konfiguration */

   equip_check = biosequip();

   /* prüft, ob ein KoProzessor installiert ist */

   if (equip_check & CO_PROCESSOR_MASK)

      printf("There is a math coprocessor installed.\n");

   else

      printf("No math coprocessor installed.\n");

   return 0;

}


Beispiel _bios_equiplist
/* Beispiel _bios_equiplist */

#include <stdio.h>

#include <bios.h>

#define CO_PROCESSOR_MASK 0x0002

int main(void)

{

  unsigned equip_check;

  /* erhält die aktuell eingerichtete Konfiguration */

  equip_check = _bios_equiplist();

  /* prüft, ob ein KoProzessor installiert ist */

  if (equip_check & CO_PROCESSOR_MASK)

    printf("There is a math coprocessor installed.\n");

   else

    printf("No math coprocessor installed.\n");

  return 0;

}


Beispiel biosmemory
/* Beispiel biosmemory */

#include <stdio.h>

#include <bios.h>

int main(void)

{

   int memory_size;

   memory_size = biosmemory();  /* gibt Wert bis 640K zurück */

   printf("RAM size = %dK\n",memory_size);

   return 0;

}


Beispiel _bios_memsize
/* Beispiel _bios_memsize */

#include <stdio.h>

#include <bios.h>

int main(void)

{

  unsigned   memory_size;

  memory_size = _bios_memsize();   /* gibt Wert bis 640K zurück */

  printf("RAM size = %dK\n", memory_size);

  return 0;

}


Beispiel biostime
/* Beispiel biostime */

#include <stdio.h>

#include <bios.h>

#include <time.h>

#include <conio.h>

int main(void)

{

  long bios_time;

   clrscr();

   printf("The number of clock ticks since midnight is:\n");

   printf("The number of seconds since midnight is:\n");

   printf("The number of minutes since midnight is:\n");

   printf("The number of hours since midnight is:\n");

   printf("\nPress any key to stop:");

   while(!kbhit())

   {

      bios_time = biostime(0, 0L);

      gotoxy(50, 1);

      printf("%lu", bios_time);

      gotoxy(50, 2);

      printf("%.4f", bios_time / _BIOS_CLK_TCK);

      gotoxy(50, 3);

      printf("%.4f", bios_time / _BIOS_CLK_TCK / 60);

      gotoxy(50, 4);

      printf("%.4f", bios_time / _BIOS_CLK_TCK / 3600);

   }

   return 0;

}


Beispiel _bios_timeofday
/* Beispiel _bios_timeofday */

#include <bios.h>

#include <time.h>

#include <conio.h>

#include <stdio.h>

int main(void)

{

  long bios_time;

  clrscr();

  printf("The number of clock ticks since midnight is:\n");

  printf("The number of seconds since midnight is:\n");

  printf("The number of minutes since midnight is:\n");

  printf("The number of hours since midnight is:\n");

  printf("\nPress any key to stop:");

  while(!kbhit())

  {

    _bios_timeofday(_TIME_GETCLOCK, &bios_time);

    gotoxy(50, 1);

    printf("%lu", bios_time);

    gotoxy(50, 2);

    printf("%.4f", bios_time / CLK_TCK);

    gotoxy(50, 3);

    printf("%.4f", bios_time / CLK_TCK / 60);

    gotoxy(50, 4);

    printf("%.4f", bios_time / CLK_TCK / 3600);

  }

  return 0;

}


Beispiel bsearch
/* Beispiel bsearch */

#include <stdlib.h>

#include <stdio.h>

typedef int (*fptr)(const void*, const void*);

#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))

int numarray[] = {123, 145, 512, 627, 800, 933};

int numeric (const int *p1, const int *p2)

{

   return(*p1 - *p2);

}

#pragma argsused

int lookup(int key)

{

   int  *itemptr;

   /* Die Umwandlung von (int(*)(const void *,const void*))

      wird benötigt um einen Typ-Konflikt zum Zeitpunkt des Compilierens zu vermeiden

   */

   itemptr = (int *) bsearch (&key, numarray, NELEMS(numarray),

      sizeof(int), (fptr)numeric);

   return (itemptr != NULL);

}

int main(void)

{

   if (lookup(512))

      printf("512 is in the table.\n");

   else

      printf("512 isn't in the table.\n");

   return 0;

}


Beispiel lfind
/* Beispiel lfind */

#include <stdio.h>

#include <stdlib.h>

int compare(int *x, int *y)

{

   return( *x - *y );

}

int main(void)

{

   int array[5] = {35, 87, 46, 99, 12};

   size_t nelem = 5;

   int key;

   int *result;

   key = 99;

   result = (int *) lfind(&key, array, &nelem,

      sizeof(int), (int(*)(const void *,const void *))compare);

   if (result)

      printf("Number %d found\n",key);

   else

      printf("Number %d not found\n",key);

   return 0;

}


Beispiel lsearch
/* Beispiel lsearch */

#include <stdlib.h>

#include <stdio.h>

#include <string.h>     /* für die Deklaration von strcmp */

/* initialisiert die Anzahl von Farben */

char *colors[10] = { "Red", "Blue", "Green" };

int ncolors = 3;

int colorscmp(char **arg1, char **arg2)

{

   return(strcmp(*arg1, *arg2));

}

int addelem(char **key)

{

   int oldn = ncolors;

   lsearch(key, colors, (size_t *)&ncolors, sizeof(char *),

     (int(*)(const void *,const void *))colorscmp);

   return(ncolors == oldn);

}

int main(void)

{

   int i;

   char *key = "Purple";

   if (addelem(&key))

      printf("%s already in colors table\n", key);

   else

   {

      printf("%s added to colors table\n", key);

   }

   printf("The colors:\n");

   for (i = 0; i < ncolors; i++)

      printf("%s\n", colors[i]);

   return 0;

}


Beispiel qsort
/* Beispiel qsort */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int sort_function( const void *a, const void *b);

char list[5][4] = { "cat", "car", "cab", "cap", "can" };

int main(void)

{

   int  x;

   qsort((void *)list, 5, sizeof(list[0]), sort_function);

   for (x = 0; x < 5; x++)

      printf("%s\n", list[x]);

   return 0;

}

int sort_function( const void *a, const void *b)

{

   return( strcmp((char *)a,(char *)b) );

}


Beispiel _rtl_chmod
/* Beispiel _rtl_chmod */

#include <errno.h>

#include <stdio.h>

#include <dos.h>

#include <io.h>

int get_file_attrib(char *filename);

int main(void)

{

  char filename[128];

  int attrib;

  printf("Enter a filename:");

  scanf("%s", filename);

  attrib = get_file_attrib(filename);

  if (attrib == -1)

     switch(errno)

     {

        case ENOENT : printf("Path or file not found.\n");

                      break;

        case EACCES : printf("Permission denied.\n");

                      break;

        default:      printf("Error number: %d", errno);

                      break;

     }

  else

     {

        if (attrib & FA_RDONLY)

           printf("%s is read-only.\n", filename);

        if (attrib & FA_HIDDEN)

           printf("%s is hidden.\n", filename);

        if (attrib & FA_SYSTEM)

           printf("%s is a system file.\n", filename);

        if (attrib & FA_DIREC)

           printf("%s is a directory.\n", filename);

        if (attrib & FA_ARCH)

           printf("%s is an archive file.\n", filename);

     }

  return 0;

}

/* liefert die Attribute einer DOS-Datei */

int get_file_attrib(char *filename)

{

   return(_rtl_chmod(filename, 0));

}


Beispiel _dos_getfileattr
/* Beispiel _dos_getfileattr */

#include <stdio.h>

#include <dos.h>

int main(void)

{

  char filename[128];

  unsigned attrib;

  printf("Enter a file name:");

  scanf("%s", filename);

  if (_dos_getfileattr(filename,&attrib) != 0)

  {

    perror("Unable to obtain file attributes");

    return 1;

  }

  if (attrib & _A_RDONLY)

    printf("%s is read-only.\n", filename);

  if (attrib & _A_HIDDEN)

    printf("%s is hidden.\n", filename);

  if (attrib & _A_SYSTEM)

    printf("%s is a system file.\n", filename);

  if (attrib & _A_VOLID)

    printf("%s is a volume label.\n", filename);

  if (attrib & _A_SUBDIR)

    printf("%s is a directory.\n", filename);

  if (attrib & _A_ARCH)

    printf("%s is an archive file.\n", filename);

  return 0;

}


Beispiel _dos_setfileattr
/* Beispiel _dos_setfileattr */

#include <stdio.h>

#include <dos.h>

int main(void)

{

  char filename[128];

  unsigned attrib;

  printf("Enter a file name:");

  scanf("%s", filename);

  if (_dos_getfileattr(filename,&attrib) != 0)

  {

    perror("Unable to obtain file attributes");

    return 1;

  }

  if (attrib & _A_RDONLY)

  {

    printf("%s currently read-only, making it read-write.\n", filename);

    attrib &= ~_A_RDONLY;

  }

  else

  {

    printf("%s currently read-write, making it read-only.\n", filename);

    attrib |= _A_RDONLY;

  }

  if (_dos_setfileattr(filename,attrib) != 0)

    perror("Unable to set file attributes");

  return 0;

}


Beispiel close
/* Beispiel close */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

main()

{

  int handle;

  char buf[11] = "0123456789";

  /* erzeugt eine Datei, die 10 Bytes enthält*/

  handle = open("NEW.FIL", O_CREAT);

  if (handle > -1)

  {

    write(handle, buf, strlen(buf));

    close(handle);                    /* schließt die Datei */

  }

  else

  {

    printf("Error opening file\n");

  }

  return 0;

}


Beispiel _rtl_close
/* Beispiel _rtl_close */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char msg[] = "Hello world";

   if ((handle = _rtl_open("TEST.$$$", O_RDWR)) == -1)

   {

      perror("Error:");

      return 1;

   }

   _rtl_write(handle, msg, strlen(msg));

   _rtl_close(handle);

   return 0;

}


Beispiel _dos_close
/* Beispiel _dos_close */

#include <dos.h>

#include <string.h>

#include <stdio.h>

int main(void)

{

  unsigned count;

  int handle;

  char buf[11] = "0123456789";

  /* erzeugt eine Datei, die 10 Bytes enthält */

  if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0)

  {

    perror("Unable to create DUMMY.FIL");

    return 1;

  }

  if (_dos_write(handle, buf, strlen(buf), &count) != 0)

  {

    perror("Unable to write to DUMMY.FIL");

    return 1;

  }

  /* schließt die Datei */

  _dos_close(handle);

  return 0;

}


Beispiel cos
/* Beispiel cos */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result;

   double x = 0.5;

   result = cos(x);

   printf("The cosine of %lf is %lf\n", x, result);

   return 0;

}


Beispiel sin
/* Beispiel sin */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result, x = 0.5;

   result = sin(x);

   printf("The sin of %lf is %lf\n", x, result);

   return 0;

}


Beispiel tan
/* Beispiel tan */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result, x;

   x = 0.5;

   result = tan(x);

   printf("The tan of %lf is %lf\n", x, result);

   return 0;

}


Beispiel cosh
/* Beispiel cosh */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result;

   double x = 0.5;

   result = cosh(x);

   printf("The hyperbolic cosine of %lf is %lf\n", x, result);

   return 0;

}


Beispiel sinh
/* Beispiel sinh */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result, x = 0.5;

   result = sinh(x);

   printf("The hyperbolic sin of %lf is %lf\n", x, result);

   return 0;

}


Beispiel tanh
/* Beispiel tanh */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result, x;

   x = 0.5;

   result = tanh(x);

   printf("The hyperbolic tangent of %lf is %lf\n", x, result);

   return 0;

}


Beispiel creat
/* Beispiel creat */

#include <sys\stat.h>

#include <string.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char buf[11] = "0123456789";

   /* ändert den Standardvorgabe-Modus der Datei von Text auf Binär */

   _fmode = O_BINARY;

   /* erzeugt eine binäre Datei für das Lesen und Schreiben */

   handle = creat("DUMMY.FIL", S_IREAD |S_IWRITE);

   /* Schreibt 10 Bytes in die Datei */

   write(handle, buf, strlen(buf));

   /* schließt die Datei */

   close(handle);

   return 0;

}


Beispiel _rtl_creat
/* Beispiel _rtl_creat */

#include <dos.h>

#include <string.h>

#include <stdio.h>

#include <io.h>

int main() {

  unsigned count;

  int handle;

  char buf[11] = "0123456789";

  /* Erzeugt eine 10 Byte lange Datei durch das Verwenden von _dos_creat. */

  if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0) {

    perror("Unable to _dos_creat DUMMY.FIL");

    return 1;

  }

  if (_dos_write(handle, buf, strlen(buf), &count) != 0) {

    perror("Unable to _dos_write to DUMMY.FIL");

    return 1;

  }

  _dos_close(handle);

  /* Erzeugt eine andere 10 Byte lange Datei durch das Verwenden von  _rtl_creat. */

  if ((handle = _rtl_creat("DUMMY2.FIL", 0)) < 0) {

    perror("Unable to _rtl_create DUMMY2.FIL");

    return 1;

  }

  if (_rtl_write(handle, buf, strlen(buf)) < 0) {

    perror("Unable to _rtl_write to DUMMY2.FIL");

    return 1;

  }

  _rtl_close(handle);

  return 0;

}


Beispiel _dos_creat
/* Beispiel _dos_creat */

#include <dos.h>

#include <string.h>

#include <stdio.h>

int main(void)

{

  unsigned count;

  int handle;

  char buf[11] = "0123456789";

  /* Erzeugt eine Datei, die 10 Bytes beinhaltet */

  if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0)

  {

    perror("Unable to create DUMMY.FIL");

    return 1;

  }

  if (_dos_write(handle, buf, strlen(buf), &count) != 0)

  {

    perror("Unable to write to DUMMY.FIL");

    return 1;

  }

  /* close the file */

  _dos_close(handle);

  return 0;

}


Beispiel _dos_creatnew
/* Beispiel _dos_creatnew */

#include <dos.h>

#include <string.h>

#include <stdio.h>

int main(void)

{

  unsigned count;

  int handle;

  char buf[11] = "0123456789";

  /* Erzeugt eine Datei, die 10 Bytes beinhaltet */

  if (_dos_creatnew("DUMMY.FIL", _A_NORMAL, &handle) != 0)

  {

    perror("Unable to create DUMMY.FIL");

    return 1;

  }

  if (_dos_write(handle, buf, strlen(buf), &count) != 0)

  {

    perror("Unable to write to DUMMY.FIL");

    return 1;

  }

  /* close the file */

  _dos_close(handle);

  return 0;

}


Beispiel creatnew
/* Beispiel creatnew */

#include <string.h>

#include <stdio.h>

#include <errno.h>

#include <dos.h>

#include <io.h>

int main(void)

{

   int handle;

   char buf[11] = "0123456789";

   /* versucht eine Datei zu erzeugen, die noch nicht existiert */

   handle = creatnew("DUMMY.FIL", 0);

if (handle == -1)

      printf("DUMMY.FIL already exists.\n");

   else

   {

      printf("DUMMY.FIL successfully created.\n");

      write(handle, buf, strlen(buf));

      close(handle);

   }

   return 0;

}


Beispiel disable
/* Beispiel disable */

/* * * * * * * * * *

HINWEIS: Das ist eine Interrupt-Serviceroutine. Sie können nicht mit angeschaltetem Test-Stacküberlauf compileren und eine ausführbare Datei erhalten, die korrekt abläuft.

 * * * * * * * * * */

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#define INTR 0X1C    /* Der Interrupt des Uhrenschlages */

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

void interrupt (*oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS) /* Bei C++, wird die Ellipse benötigt */

{

/* schaltet Interrupts während der Behandlung des Interrupts ab */

   disable();

/* erhöht den globalen Zähler */

   count++;

/* schaltet Interrupts am Ende des Handlers wieder ein */

enable();

/* ruft die alte Routine auf */

   oldhandler();

}

int main(void)

{

/* speichert den alten Interrupt-Vektor ab */

   oldhandler = getvect(INTR);

/* installiert den neuen Interrupt-Handler */

   setvect(INTR, handler);

/* Schleife bis der Zähler 20 überschreitet */

   while (count < 20)

      printf("count is %d\n",count);

/* setzt den alten Interrupt-Handler zurück */

   setvect(INTR, oldhandler);

return 0;

}


Beispiel _disable
/* Beispiel _disable */

/* * * * * * * * * *

HINWEIS: Das ist eine Interrupt-Serviceroutine. Sie können nicht mit angeschaltetem Test-Stacküberlauf compileren und eine ausführbare Datei erhalten, die korrekt abläuft.

 * * * * * * * * * */

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#define INTR 0X1C    /* Der Interrupt für Uhrenschläge */

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

void interrupt (*oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS) /* if C++, need the the ellipsis */

{

/* Abschalten des Interrupts während der Interrupt-Behandlung */

   _disable();

/* Erhöhen des globalen Zählers */

   count++;

/* Wiederherstellen von Interrupts am Ende des Handlers */

   enable();

/* Aufrufen der alten Routine */

   oldhandler();

}

int main(void)

{

/* Speichern des alten Interruptvektors */

oldhandler = _dos_getvect(INTR);

/* Installieren des neuen Interrupthandlers */

   _dos_setvect(INTR, handler);

/* Schleife bis der Zähler 20 übersteigt */

   while (count < 20)

      printf("count is %d\n",count);

/* Zurücksetzen auf den alten Interrupt-Handler */

   _dos_setvect(INTR, oldhandler);

   return 0;

}


Beispiel enable
/* Beispiel enable */

/* * * * * * * * * *

HINWEIS: Das ist eine Interrupt-Serviceroutine. Sie können nicht mit angeschaltetem Test-Stacküberlauf compileren und eine ausführbare Datei erhalten, die korrekt abläuft.

 * * * * * * * * * */

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#define INTR 0X1C    /* Der Interrupt für Uhrenschläge */

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

void interrupt (*oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS) /* if C++, need the the ellipsis */

{

/* Abschalten des Interrupts für die Dauer der Behandlung*/

   disable();

/* Erhöhen des globalen Zeigers */

   count++;

/* Wiederanschalten der Interrupts am Endes des Handlers */

   enable();

/* Aufrufen der alten Routine */

   oldhandler();

}

int main(void)

{

/* Speichern des alten Interruptvektors */

   oldhandler = getvect(INTR);

/* Installieren des neuen Interrupt-Handlers */

   setvect(INTR, handler);

/* Schleife, bis der Zähler 20 übersteigt */

   while (count < 20)

      printf("count is %d\n",count);

/* Zurücksetzen auf den alten Interrupt-Handler */

   setvect(INTR, oldhandler);

   return 0;

}


Beispiel _enable
/* Beispiel _enable */

/* * * * * * * * * *

HINWEIS: Das ist eine Interrupt-Serviceroutine. Sie können nicht mit angeschaltetem Test-Stacküberlauf compileren und eine ausführbare Datei erhalten, die korrekt abläuft.

 * * * * * * * * * */

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#define INTR 0X1C    /* Der Interrupt für Uhrenschläge */

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

void interrupt (*oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS) /* Falls C++, benötigt der Compiler Ellipsen */

{

/* Abschalten des Interrupts für die Dauer der Behandlung*/

   disable();

/* Erhöhen des globalen Zeigers */

   count++;

/* Wiederanschalten der Interrupts am Endes des Handlers */

   _enable();

/* Aufrufen der alten Routine */

   oldhandler();

}

int main(void)

{

/* Speichern des alten Interrupt-Vektors */

   oldhandler = _dos_getvect(INTR);

/* Installieren des neuen Interrupt-Handlers */

   _dos_setvect(INTR, handler);

/* Schleife, bis der Zähler 20 übersteigt */

   while (count < 20)

      printf("count is %d\n",count);

/* Zurücksetzen auf den alten Interrupt-Handler */

   _dos_setvect(INTR, oldhandler);

   return 0;

}


Beispiel div
/* Beispiel div */

/* Beispiel div */

#include <stdlib.h>

#include <stdio.h>

div_t x;

int main(void)

{

   x = div(10,3);

   printf("10 div 3 = %d remainder %d\n",

   x.quot, x.rem);

   return 0;

}


Beispiel ldiv
/* Beispiel ldiv */

/* ldiv example */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   ldiv_t lx;

   lx = ldiv(100000L, 30000L);

  printf("100000 div 30000 = %ld remainder %ld\n", lx.quot, lx.rem);

   return 0;

}


Beispiel dup
/* Beispiel dup */

#include <string.h>

#include <stdio.h>

#include <conio.h>

#include <io.h>

void flush(FILE *stream);

int main(void)

{

  FILE *fp;

  char msg[] = "This is a test";

  /* Erzeugen einer Datei */

  fp = fopen("DUMMY.FIL", "w");

  /* Schreiben von Daten in die Datei */

  fwrite(msg, strlen(msg), 1, fp);

  clrscr();

  printf("Press any key to flush DUMMY.FIL:");

  getch();

  /* Leeren der Daten in DUMMY.FIL, ohne es zu schließen */

  flush(fp);

  printf("\nFile was flushed, Press any key to quit:");

  getch();

  return 0;

}

void flush(FILE *stream)

{

  int duphandle;

  /* Entleeren des internen Puffers von TC */

  fflush(stream);

  /* Erstellen einer Kopie des Datei-Handles */

  duphandle = dup(fileno(stream));

  /* Schließen der Kopie des Handles, um den DOS-Puffer zu leeren */

  close(duphandle);

}


Beispiel dup2
/* Beispiel dup2 */

#include <sys\stat.h>

#include <string.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   #define STDOUT 1

   int nul, oldstdout;

   char msg[] = "This is a test";

   /* Erzeugen einer Datei */

   nul = open("DUMMY.FIL", O_CREAT | O_RDWR,

      S_IREAD | S_IWRITE);

   /* Erzeugen einer Kopie des Handles für die Standardausgabe */

   oldstdout = dup(STDOUT);

   /*

      Umlenken der Standardausgabe nach DUMMY.FIL

      durch Kopieren des Datei-Handles

      in den Datei-Handle für die Standard-Ausgabe.

   */

   dup2(nul, STDOUT);

   /* Schließen des Handles für DUMMY.FIL */

   close(nul);

   /* wird umgelenkt nach DUMMY.FIL */

   write(STDOUT, msg, strlen(msg));

   /* Wiederherstellen des ursprünglichen Handles für die Standardausgabe */

   dup2(oldstdout, STDOUT);

   /* Schließen des Kopier-Handles für STDOUT */

   close(oldstdout);

   return 0;

}


Beispiel ecvt
/* Beispiel ecvt */

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

int main(void)

{

   char *string;

   double value;

   int dec, sign;

   int ndig = 10;

   clrscr();

   value = 9.876;

   string = ecvt(value, ndig, &dec, &sign);

   printf("string = %s      dec = %d sign = %d\n", string, dec, sign);

   value = -123.45;

   ndig= 15;

   string = ecvt(value,ndig,&dec,&sign);

   printf("string = %s dec = %d sign = %d\n", string, dec, sign);

   value = 0.6789e5; /* exponentielle Schreibweise */

   ndig = 5;

   string = ecvt(value,ndig,&dec,&sign);

   printf("string = %s         dec = %d sign = %d\n", string, dec, sign);

   return 0;

}


Beispiel fcvt
/* Beispiel fcvt */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

  char *str;

  double num;

  int dec, sign, ndig = 5;

  /* eine normale Zahl */

  num = 9.876;

  str = fcvt(num, ndig, &dec, &sign);

  printf("string = %10s decimal place = %d sign = %d\n", str, dec, sign);

  /* eine negative Zahl */

  num = -123.45;

  str = fcvt(num, ndig, &dec, &sign);

  printf("string = %10s decimal place = %d sign = %d\n", str, dec, sign);

  /* exponentielle Schreibweise */

  num = 0.678e5;

  str = fcvt(num, ndig, &dec, &sign);

  printf("string = %10s  decimal place= %d  sign = %d\n", str, dec, sign);

  return 0;

}


Beispiel execl
/* Beispiel execl */

/* execl() example */

#include <stdio.h>

#include <process.h>

int main(int argc, char *argv[])

{

  int loop;

  printf("%s running...\n\n", argv[0]);

  if (argc == 1) {    /* prüft für nur einen Kommandozeilenparameter */

    printf("%s calling itself again...\n", argv[0]);

    execl(argv[0], argv[0], "ONE", "TWO", "THREE", NULL);

    perror("EXEC:");

    exit(1);

  }

  printf("%s called with arguments:\n", argv[0]);

  for (loop = 1; loop <= argc; loop++)

    puts(argv[loop]);       /* Anzeigen aller Kommandozeilenparameter */

  return 0;

}


Beispiel execlp
/* Beispiel execlp */

/* execlp example */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main( int argc, char *argv[])

{

   int i;

   printf("Command line arguments:\n");

   for (i=0; i < argc; ++i)

      printf("[%2d] %s\n", i, argv[i]);

   printf("About to exec child with arg1 arg2 ...\n");

   execlp("CHILD.EXE", "CHILD.EXE", "arg1", "arg2", NULL);

   perror("exec error");

   exit(1);

   return 0;

}


Beispiel execle
/* Beispiel execle */

#include <process.h>

#include <stdlib.h>

#include <stdio.h>

int main(int argc, char *argv[], char *env[])

{

  int loop;

  char *new_env[] = { "TESTING", NULL };

  printf("%s running...\n\n", argv[0]);

  if (argc == 1) {   /* prüft für nur einen Kommandozeilenparameter */

    printf("%s calling itself again...\n", argv[0]);

    execle(argv[0], argv[0], "ONE", "TWO", "THREE", NULL, new_env);

    perror("EXEC:");

    exit(1);

  }

  printf("%s called with arguments:\n", argv[0]);

  for (loop = 1; loop <= argc; loop++)

    puts(argv[loop]);  /* Anzeigen aller Kommandozeilenparameter */

  /* Anzeigen des ersten Parameters der Umgebung */

  printf("value of env[0]: %s\n",env[0]);

  return 0;

}


Beispiel execlpe
/* Beispiel execlpe */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main(int argc, char *argv[], char **envp )

{

  int i;

  printf("Command line arguments:\n");

  for (i=0; i < argc; ++i)

    printf("[%2d] : %s\n", i, argv[i]);

  printf("About to exec child with arg1 arg2 ...\n");

  execlpe("CHILD.EXE", "CHILD.EXE", "arg1", "arg2", NULL, envp);

  perror("exec error");

  exit(1);

  return 0;

}


Beispiel execv
/* Beispiel execv */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main(int argc, char *argv[])

{

  int i;

  printf("Command line arguments:\n");

  for (i=0; i < argc; i++)

    printf("[%2d] : %s\n", i, argv[i]);

  printf("About to exec child with arg1 arg2 ...\n");

  execv("CHILD.EXE", argv);

  perror("exec error");

  exit(1);

  return 0;

}


Beispiel execve
/* Beispiel execve */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main(int argc, char *argv[], char **envp)

{

  int i;

  printf("Command line arguments:\n");

  for (i=0; i < argc; ++i)

    printf("[%2d] : %s\n", i, argv[i]);

  printf("About to exec child with arg1 arg2 ...\n");

  execve("CHILD.EXE", argv, envp);

  perror("exec error");

  exit(1);

  return 0;

}


Beispiel execvp
/* Beispiel execvp */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main(int argc, char *argv[])

{

  int i;

  printf("Command line arguments:\n");

  for (i=0; i < argc; ++i)

    printf("[%2d] : %s\n", i, argv[i]);

  printf("About to exec child with arg1 arg2 ...\n");

  execvp("CHILD.EXE", argv);

  perror("exec error");

  exit(1);

  return 0;

}


Beispiel execvpe
/* Beispiel execvpe */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main(int argc, char *argv[], char **envp)

{

  int i;

  printf("Command line arguments:\n");

  for (i=0; i < argc; ++i)

    printf("[%2d] : %s\n", i, argv[i]);

  printf("About to exec child with arg1 arg2 ...\n");

  execvpe("CHILD.EXE", argv, envp);

  perror("exec error");

  exit(1);

  return 0;

}


Beispiel _exit
/* Beispiel _exit */

#include   <stdlib.h>

#include   <stdio.h>

void done(void);

int main(void)

{

   atexit(done);

   _exit(0);

   return 0;

}

void done()

{

   printf("hello\n");

}


Beispiel _c_exit
/* Beispiel _c_exit */

#include <process.h>

#include <io.h>

#include <fcntl.h>

#include <stdio.h>

#include <dos.h>

main()

{

  int fd;

  char c;

  if ((fd = open("_c_exit.c",O_RDONLY)) < 0)

  {

    printf("Unable to open _c_exit.c for reading\n");

    return 1;

  }

  if (read(fd,&c,1) != 1)

    printf("Unable to read from open file handle %d before _c_exit\n",fd);

  else

    printf("Successfully read from open file handle %d before _c_exit\n",fd);

  printf("Interrupt zero vector before _c_exit = %Fp\n",_dos_getvect(0));

  _c_exit();

  if (read(fd,&c,1) != 1)

    printf("Unable to read from open file handle %d after _c_exit\n",fd);

  else

    printf("Successfully read from open file handle %d after _c_exit\n",fd);

  printf("Interrupt zero vector after _c_exit = %Fp\n",_dos_getvect(0));

 return 0;

}


Beispiel exit
/* exit */

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

int main(void)

{

   int status;

   printf("Enter either 1 or 2\n");

   status = getch();

   /* Setzt den Errorlevel von DOS */

   exit(status - '0');

/* HINWEIS: Diese Zeile wird niemals erreicht */

   return 0;

}


Beispiel _cexit
/* Beispiel _cexit */

#include <windows.h>

#include <process.h>

#include <io.h>

#include <fcntl.h>

#include <stdio.h>

#include <stdlib.h>

void exit_func(void)

{

  printf("Exit function called\n\n");

  printf("Close Window to return to program... It will beep if able to read from file");

}

int main(void)

{

  int fd;

  char c;

  if ((fd = open("_cexit.c",O_RDONLY)) < 0)

  {

printf("Unable to open _cexit.c for reading\n");

return 1;

  }

  atexit(exit_func);

  if (read(fd,&c,1) != 1)

printf("Unable to read from open file handle %d before _cexit\n",fd);

  else

printf("Successfully read from open file handle %d before _cexit\n",fd);

  _cexit();

  if (read(fd,&c,1) == 1)

  MessageBeep(0);

  return 0;

}


Beispiel farfree
/* Beispiel farfree */

#include <stdio.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

int main(void)

{

   char far *fptr;

   char *str = "Hello";

   /* reserviert Speicher für den Zeiger vom Typ far*/

   fptr = (char far *) farcalloc(10, sizeof(char));

   /* kopiert "Hello" in den reservierten Speicher */

/*

HINWEIS: movedata wird verwendet, weil Sie sich im Datenmodell small befinden könnten. In diesem Fall kann eine normale Routine zum Kopieren von Strings nicht verwendet werden, da diese eine Zeigergröße near annimmt.

 */

   movedata(FP_SEG(str), FP_OFF(str),

            FP_SEG(fptr), FP_OFF(fptr),

            strlen(str));

   /* String anzeigen (Beachten Sie den Modifizierer F) */

   printf("Far string is: %Fs\n", fptr);

   /* Speicherplatz freigeben */

   farfree(fptr);

   return 0;

}


Beispiel free
/* Beispiel free */

#include <string.h>

#include <stdio.h>

#include <alloc.h>

int main(void)

{

   char *str;

   /* Speicherplatz für einen String reservieren */

   str = (char *) malloc(10);

   /* Kopieren von "Hello" in den String */

   strcpy(str, "Hello");

   /* Anzeigen von String */

   printf("String is %s\n", str);

   /* Speicherplatz freigeben */

   free(str);

   return 0;

}


Beispiel fgetc
/* Beispiel fgetc */

#include <string.h>

#include <stdio.h>

#include <conio.h>

int main(void)

{

   FILE *stream;

   char string[] = "This is a test";

   char ch;

   /* Öffnen einer Datei zur Aktualisierung */

   stream = fopen("DUMMY.FIL", "w+");

   /* Schreiben eines Strings in die Datei */

   fwrite(string, strlen(string), 1, stream);

   /* Setzen des Dateizeigers an den Dateianfang */

   fseek(stream, 0, SEEK_SET);

   do

   {

      /* Lesen eines Zeichens aus der Datei */

      ch = fgetc(stream);

      /* Anzeigen des Zeichens */

      putch(ch);

   } while (ch != EOF);

   fclose(stream);

   return 0;

}


Beispiel fputc
/* Beispiel fputc */

#include <stdio.h>

int main(void)

{

   char msg[] = "Hello world";

   int i = 0;

   while (msg[i])

   {

      fputc(msg[i], stdout);

      i++;

   }

   return 0;

}


Beispiel fgetchar
/* Beispiel fgetchar */

#include <stdio.h>

int main(void)

{

   char ch;

   /* Eingabeaufforderung an den Anwender */

   printf("Enter a character followed by <Enter>: ");

   /* Liest das Zeichen aus stdin */

   ch = fgetchar();

   /* Zeigt an, was gelesen wurde */

   printf("The character read is: '%c'\n", ch);

   return 0;

}


Beispiel fputchar
/* Beispiel fputchar */

#include <stdio.h>

int main(void)

{

   char msg[] = "This is a test";

   int i = 0;

   while (msg[i])

   {

      fputchar(msg[i]);

      i++;

   }

   return 0;

}


Beispiel fgets
/* Beispiel fgets */

#include <string.h>

#include <stdio.h>

int main(void)

{

   FILE *stream;

   char string[] = "This is a test";

   char msg[20];

   /* Öffnet eine Datei zur Aktualisierung */

   stream = fopen("DUMMY.FIL", "w+");

   /* Schreibt einen String in die Datei */

   fwrite(string, strlen(string), 1, stream);

   /* Setzt den Dateizeiger an den Dateianfang */

   fseek(stream, 0, SEEK_SET);

   /* Liest einen String aus der Datei */

   fgets(msg, strlen(string)+1, stream);

   /* Zeigt den String an */

   printf("%s", msg);

   fclose(stream);

   return 0;

}


Beispiel fputs
/* Beispiel fputs */

#include <stdio.h>

int main(void)

{

   /* schreibt einen String in die Standardausgabe */

   fputs("Hello world\n", stdout);

   return 0;

}


Beispiel _dos_findfirst und _dos_findnext
/* Beispiel _dos_findfirst und _dos_findnext */

#include <stdio.h>

#include <dos.h>

int main(void)

{

  struct find_t ffblk;

  int done;

  printf("Directory listing of *.*\n");

  done = _dos_findfirst("*.*",_A_NORMAL,&ffblk);

  while (!done) {

    printf("  %s\n", ffblk.name);

    done = _dos_findnext(&ffblk);

  }

  return 0;

}

/* Ausgabe des Programms

Directory listing of *.*

  FINDFRST.C

  FINDFRST.OBJ

  FINDFRST.MAP

  FINDFRST.EXE  */


Beispiel findfirst und findnext
/* Beispiel findfirst und findnext */

/* Beispiel findfirst und findnext */

#include <stdio.h>

#include <dir.h>

int main(void)

{

   struct ffblk ffblk;

   int done;

   printf("Directory listing of *.*\n");

   done = findfirst("*.*",&ffblk,0);

   while (!done)

   {

      printf("  %s\n", ffblk.ff_name);

      done = findnext(&ffblk);

   }

   return 0;

}


Beispiel _fsopen
/* Beispiel _fsopen */

#include <io.h>

#include <process.h>

#include <share.h>

#include <stdio.h>

int main(void)

{

  FILE *f;

  int status;

  f = _fsopen("c:\\autoexec.bat", "r", SH_DENYNO);

  if (f == NULL)

  {

    printf("_fsopen failed\n");

    exit(1);

  }

  status = access("c:\\autoexec.bat", 6);

  if (status == 0)

    printf("read/write access allowed\n");

  else

    printf("read/write access not allowed\n");

  fclose(f);

  return 0;

}


Beispiel fdopen
/* Beispiel fdopen */

#include <sys\stat.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   FILE *stream;

   /* Öffnen einer Datei */

   handle = open("DUMMY.FIL", O_CREAT,

                  S_IREAD | S_IWRITE);

   /* Umwandeln des Handles in einen Stream */

   stream = fdopen(handle, "w");

   if (stream == NULL)

      printf("fdopen failed\n");

   else

   {

      fprintf(stream, "Hello world\n");

      fclose(stream);

   }

   return 0;

}


Beispiel fopen
/* Beispiel fopen */

/* Programm zum Erzeugen einer Sicherungskopie der Datei AUTOEXEC.BAT */

#include <stdio.h>

int main(void)

{

   FILE *in, *out;

   if ((in = fopen("\\AUTOEXEC.BAT", "rt"))

       == NULL)

   {

      fprintf(stderr, "Cannot open input file.\n");

      return 1;

   }

   if ((out = fopen("\\AUTOEXEC.BAK", "wt"))

       == NULL)

   {

      fprintf(stderr, "Cannot open output file.\n");

      return 1;

   }

   while (!feof(in))

      fputc(fgetc(in), out);

   fclose(in);

   fclose(out);

   return 0;

}


Beispiel freopen
/* Beispiel freopen */

#include <stdio.h>

int main(void)

{

   /* Umleiten der Standardausgabe in eine Datei */

   if (freopen("OUTPUT.FIL", "w", stdout)

       == NULL)

      fprintf(stderr, "error redirecting stdout\n");

   /* Diese Ausgabe erfolgt in eine Datei */

   printf("This will go into a file.");

   /* Schließen des Streams für die Standardausgabe */

   fclose(stdout);

   return 0;

}


Beispiel freemem
/* Beispiel freemem */

#include <dos.h>

#include <alloc.h>

#include <stdio.h>

int main(void)

{

   unsigned int size, segp;

   int stat;

   size = 64; /* (64 x 16) = 1024 bytes */

   stat = allocmem(size, &segp);

   if (stat < 0)

      printf("Allocated memory at segment: %x\n", segp);

   else

      printf("Failed: maximum number of\

             paragraphs available is %u\n", stat);

   freemem(segp);

   return 0;

}


Beispiel fstat
/* Beispiel fstat */

#include <sys\stat.h>

#include <stdio.h>

#include <time.h>

int main(void)

{

   struct stat statbuf;

   FILE *stream;

   /* Öffnen einer Datei zur Aktualisierung */

   if ((stream = fopen("DUMMY.FIL", "w+"))

       == NULL)

   {

      fprintf(stderr, "Cannot open output file.\n");

      return(1);

   }

   fprintf(stream, "This is a test");

   fflush(stream);

   /* Erhalten von Informationen über die Datei */

   fstat(fileno(stream), &statbuf);

   fclose(stream);

   /* Anzeigen der zurückgelieferten Information */

   if (statbuf.st_mode & S_IFCHR)

      printf("Handle refers to a device.\n");

   if (statbuf.st_mode & S_IFREG)

      printf("Handle refers to an ordinary file.\n");

   if (statbuf.st_mode & S_IREAD)

      printf("User has read permission on file.\n");

   if (statbuf.st_mode & S_IWRITE)

      printf("User has write permission on file.\n");

   printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);

   printf("Size of file in bytes: %ld\n", statbuf.st_size);

   printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));

   return 0;

}


Beispiel stat
/* Beispiel stat */

#include <sys\stat.h>

#include <stdio.h>

#include <time.h>

#define FILENAME "TEST.$$$"

int main(void)

{

   struct stat statbuf;

   FILE *stream;

   /* Öffnen einer Datei zur Aktualisierung */

   if ((stream = fopen(FILENAME, "w+")) == NULL)

   {

      fprintf(stderr, "Cannot open output file.\n");

      return(1);

   }

   /* Einholen von Informationen über die Datei */

   stat(FILENAME, &statbuf);

   fclose(stream);

   /* Anzeigen der zurückgelieferten Information */

   if (statbuf.st_mode & S_IFCHR)

      printf("Handle refers to a device.\n");

   if (statbuf.st_mode & S_IFREG)

      printf("Handle refers to an ordinary file.\n");

   if (statbuf.st_mode & S_IREAD)

      printf("User has read permission on file.\n");

   if (statbuf.st_mode & S_IWRITE)

      printf("User has write permission on file.\n");

   printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);

   printf("Size of file in bytes: %ld\n", statbuf.st_size);

   printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));

   return 0;

}


Beispiel getc
/* Beispiel getc */

#include <stdio.h>

int main(void)

{

   char ch;

   printf("Input a character:");

/* Lesen eines Zeichens vom

Stream für die Standardeingabe */

   ch = getc(stdin);

   printf("The character input was: '%c'\n", ch);

   return 0;

}


Beispiel putc
/* Beispiel putc */

#include <stdio.h>

int main(void)

{

   char msg[] = "Hello world\n";

   int i = 0;

   while (msg[i])

      putc(msg[i++], stdout);

   return 0;

}


Beispiel getch
/* Beispiel getch */

#include <conio.h>

#include <stdio.h>

int main(void)

{

  int c;

  int extended = 0;

  c = getch();

  if (!c)

    extended = getch();

  if (extended)

    printf("The character is extended\n");

  else

    printf("The character isn't extended\n");

  return 0;

}


Beispiel getche
/* Beispiel getche */

#include <stdio.h>

#include <conio.h>

int main(void)

{

   char ch;

   printf("Input a character:");

   ch = getche();

   printf("\nYou input a '%c'\n", ch);

   return 0;

}


Beispiel getchar
/* Beispiel getchar */

#include <stdio.h>

int main(void)

{

   int c;

 /*

Beachten Sie, daß getchar von stdin liest und Zeilengepuffert ist; das bedeutet, daß nichts zurückgeliefert wird bevor Sie die Eingabetaste betätigen.

 */

   while ((c = getchar()) != '\n')

      printf("%c", c);

   return 0;

}


Beispiel putchar
/* Beispiel putchar */

#include <stdio.h>

 /* Definiert einige Zeichen zum Zeichnen von Feldern */

#define LEFT_TOP  0xDA

#define RIGHT_TOP 0xBF

#define HORIZ     0xC4

#define VERT      0xB3

#define LEFT_BOT  0xC0

#define RIGHT_BOT 0xD9

int main(void)

{

   char i, j;

    /* Zeichnet den oberen Teil des Feldes */

   putchar(LEFT_TOP);

   for (i=0; i<10; i++)

      putchar(HORIZ);

   putchar(RIGHT_TOP);

   putchar('\n');

    /* Zeichnet den mittleren Teil */

   for (i=0; i<4; i++)

   {

      putchar(VERT);

      for (j=0; j<10; j++)

         putchar(' ');

      putchar(VERT);

      putchar('\n');

   }

    /* Zeichnet den unteren Teil */

   putchar(LEFT_BOT);

   for (i=0; i<10; i++)

      putchar(HORIZ);

   putchar(RIGHT_BOT);

   putchar('\n');

   return 0;

}


Beispiel getcwd
/* Beispiel getcwd */

#include <stdio.h>

#include <dir.h>

int main(void)

{

   char buffer[MAXPATH];

   getcwd(buffer, MAXPATH);

   printf("The current directory is: %s\n", buffer);

   return 0;

}


Beispiel _getdcwd
/* Beispiel _getdcwd */

#include <direct.h>

#include <stdio.h>

char buf[65];

void main()

{

  if (_getdcwd(3, buf, sizeof(buf)) == NULL)

    perror("Unable to get current directory of drive C");

  else

    printf("Current directory of drive C is %s\n",buf);

}


Beispiel _dos_getdate
/* Beispiel _dos_getdate */

#include <dos.h>

#include <stdio.h>

int main(void)

{

  struct dosdate_t d;

  _dos_getdate(&d);

  printf("The current year is: %d\n", d.year);

  printf("The current day is: %d\n", d.day);

  printf("The current month is: %d\n", d.month);

  return 0;

}


Beispiel _dos_setdate
/* Beispiel _dos_setdate */

#include <dos.h>

#include <process.h>

#include <stdio.h>

int main(void)

{

  struct dosdate_t reset;

  reset.year  = 2001;

  reset.day   = 1;

  reset.month = 1;

  printf("Setting date to 1/1/2001.\n");

  _dos_setdate(&reset);

  system("date");

  return 0;

}


Beispiel getdate
/* Beispiel getdate */

#include <dos.h>

#include <stdio.h>

int main(void)

{

   struct date d;

   getdate(&d);

   printf("The current year is: %d\n", d.da_year);

   printf("The current day is: %d\n", d.da_day);

   printf("The current month is: %d\n", d.da_mon);

   return 0;

}


Beispiel setdate
/* Beispiel setdate */

#include <stdio.h>

#include <process.h>

#include <dos.h>

int main(void)

{

   struct date reset;

   struct date save_date;

   getdate(&save_date);

   printf("Original date:\n");

   system("date");

   reset.da_year = 2001;

   reset.da_day = 1;

   reset.da_mon = 1;

   setdate(&reset);

   printf("Date after setting:\n");

   system("date");

   setdate(&save_date);

   printf("Back to original date:\n");

   system("date");

   return 0;

}


Beispiel _dos_getdiskfree
/* Beispiel _dos_getdiskfree */

#include <stdio.h>

#include <dos.h>

#include <process.h>

int main(void)

{

  struct diskfree_t free;

  long avail;

  if (_dos_getdiskfree(0, &free) != 0) {

    printf("Error in _dos_getdiskfree() call\n");

    exit(1);

  }

  avail = (long) free.avail_clusters

        * (long) free.bytes_per_sector

        * (long) free.sectors_per_cluster;

  printf("The current drive has %ld bytes available\n", avail);

  return 0;

}


Beispiel getdfree
/* Beispiel getdfree */

#include <stdio.h>

#include <dos.h>

#include <process.h>

int main(void)

{

  struct diskfree_t free;

  long avail;

  if (_dos_getdiskfree(0, &free) != 0) {

    printf("Error in _dos_getdiskfree() call\n");

    exit(1);

  }

  avail = (long) free.avail_clusters

        * (long) free.bytes_per_sector

        * (long) free.sectors_per_cluster;

  printf("The current drive has %ld bytes available\n", avail);

  return 0;

}


Beispiel _chdrive
/* Beispiel _chdrive */

 #include <stdio.h>

#include <direct.h>

int main(void)

{

  if (_chdrive(3) == 0)

    printf("Successfully changed to drive C:\n");

  else

    printf("Cannot change to drive C:\n");

  return 0;

}


Beispiel _dos_getdrive
/* Beispiel _dos_getdrive */

#include <stdio.h>

#include <dos.h>

int main(void)

{

  unsigned disk;

  _dos_getdrive(&disk);

  printf("The current drive is: %c\n", disk + 'A' - 1);

  return 0;

}


Beispiel _dos_setdrive
/* Beispiel _dos_setdrive */

#include <stdio.h>

#include <dos.h>

int main(void)

{

  unsigned maxdrives;

  _dos_setdrive(3,&maxdrives);	 /* setzt Laufwerk auf C: */

  printf("The number of logical drives is: %d\n", maxdrives);

  return 0;

}


Beispiel _getdrive
/* Beispiel _getdrive */

#include <stdio.h>

#include <direct.h>

int main(void)

{

  int disk;

  disk = _getdrive() + 'A' - 1;

  printf("The current drive is: %c\n", disk);

  return 0;

}


Beispiel getdisk
/* Beispiel getdisk */

#include <stdio.h>

#include <dir.h>

int main(void)

{

  int disk, maxdrives = setdisk(2);

  disk = getdisk() + 'A';

  printf("\nThe number of logical drives is:%d\n", maxdrives);

  printf("The current drive is: %c\n", disk);

  return 0;

 }


Beispiel setdisk
/* Beispiel setdisk */

#include <stdio.h>

#include <dir.h>

int main(void)

{

   int save, disk, disks;

    /* Speichert das ursprüngliche Laufwerk */

   save = getdisk();

    /* Druckt die Anzahl der logischen Laufwerke */

   disks = setdisk(save);

   printf("%d logical drives on the system\n\n", disks);

    /* Druckt die verfügbaren Laufwerksbuchstaben */

   printf("Available drives:\n");

   for (disk = 0;disk < 26;++disk)

   {

      setdisk(disk);

      if (disk == getdisk())

         printf("%c: drive is available\n", disk + 'a');

   }

   setdisk(save);

   return 0;

}


Beispiel getdta
/* Beispiel getdta */

#include <dos.h>

#include <stdio.h>

int main(void)

{

   char far *dta;

   dta = getdta();

   printf("The current disk transfer address is: %Fp\n", dta);

   return 0;

}


Beispiel setdta
/* Beispiel setdta */

#include <process.h>

#include <string.h>

#include <stdio.h>

#include <dos.h>

int main(void)

{

   char line[80], far *save_dta;

   char buffer[256] = "SETDTA test!";

   struct fcb blk;

   int result;

    /* Erhält den neuen Dateinamen von Anwender */

   printf("Enter a file name to create:");

   gets(line);

    /* Zerlegt den neuen Dateinamen zu blk */

   parsfnm(line, &blk, 1);

   printf("%d %s\n", blk.fcb_drive, blk.fcb_name);

    /* Fordert die Dienste von DOS an, um eine Datei zu erzeugen */

   if (bdosptr(0x16, &blk, 0) == -1)

   {

      perror("Error creating file");

      exit(1);

   }

    /* Speichert das alte dta und setzt ein neues dta */

   save_dta = getdta();

   setdta(buffer);

    /* Schreibt neue Datensätze */

   blk.fcb_recsize = 256;

   blk.fcb_random = 0L;

   result = randbwr(&blk, 1);

   printf("result = %d\n", result);

   if (!result)

      printf("Write OK\n");

   else

   {

      perror("Disk error");

      exit(1);

   }

    /* Fordert Dienste von DOS an, um die Datei zu schließen */

   if (bdosptr(0x10, &blk, 0) == -1)

   {

      perror("Error closing file");

      exit(1);

   }

    /* Setzt auf das alte dta zurück */

   setdta(save_dta);

   return 0;

}


Beispiel getfat
/* Beispiel getfat */

#include <stdio.h>

#include <dos.h>

int main(void)

{

   struct fatinfo diskinfo;

   int flag = 0;

   printf("Please insert disk in drive A\n");

   getchar();

   getfat(1, &diskinfo);

 /* Erhält die Treiberinformation */

   printf("\nDrive A: is ");

   switch((unsigned char) diskinfo.fi_fatid)

   {

      case 0xFD:

        printf("360K low density\n");

        break;

      case 0xF9:

        printf("1.2 Meg high density\n");

        break;

      default:

        printf("unformatted\n");

        flag = 1;

   }

   if (!flag)

   {

      printf("  sectors per cluster %5d\n", diskinfo.fi_sclus);

      printf("   number of clusters %5d\n", diskinfo.fi_nclus);

      printf("     bytes per sector %5d\n", diskinfo.fi_bysec);

   }

   return 0;

}


Beispiel getfatd
/* Beispiel getfatd */

#include <stdio.h>

#include <dos.h>

int main()

{

   struct fatinfo diskinfo;

    /* Erhält die standardmäßige Treiberinformation */

   getfatd(&diskinfo);

   printf("\nDefault Drive:\n");

   printf("sectors per cluster: %5d\n",diskinfo.fi_sclus);

   printf("FAT ID byte:         %5X\n",diskinfo.fi_fatid & 0xFF);

   printf("number of clusters   %5d\n",diskinfo.fi_nclus);

   printf("bytes per sector     %5d\n",diskinfo.fi_bysec);

   return 0;

}


Beispiel getftime
/* Beispiel getftime */

#include <stdio.h>

#include <io.h>

int main(void)

{

   FILE *stream;

   struct ftime ft;

   if ((stream = fopen("TEST.$$$",

        "wt")) == NULL)

   {

      fprintf(stderr, "Cannot open output file.\n");

      return 1;

   }

   getftime(fileno(stream), &ft);

   printf("File time: %u:%u:%u\n",

          ft.ft_hour, ft.ft_min,

          ft.ft_tsec * 2);

   printf("File date: %u/%u/%u\n",

          ft.ft_month, ft.ft_day,

          ft.ft_year+1980);

   fclose(stream);

   return 0;

}


Beispiel setftime
/* Beispiel setftime */

#include <stdio.h>

#include <process.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   struct ftime filet;

   FILE *fp;

   if ((fp = fopen("TEST.$$$", "w")) == NULL)

   {

      perror("Error:");

      exit(1);

   }

   fprintf(fp, "testing...\n");

    /* Lädt die Stuktur mit neuer Zeit und neuem Datum */

   filet.ft_tsec = 1;

   filet.ft_min = 1;

   filet.ft_hour = 1;

   filet.ft_day = 1;

   filet.ft_month = 1;

   filet.ft_year = 21;

    /* Zeigt das aktuelle Verzeichnis für Zeit und Datum an */

   system("dir TEST.$$$");

    /* Ändert den Stempel für Zeit und Datum */

   setftime(fileno(fp), &filet);

    /* Schließt und entfernt die temporäre Datei */

   fclose(fp);

   system("dir TEST.$$$");

   unlink("TEST.$$$");

   return 0;

}


Beispiel _dos_getftime
/* Beispiel _dos_getftime */

#include <stdio.h>

#include <dos.h>

int main()

{

  FILE *stream;

  unsigned date, time;

  if ((stream = fopen("TEST.$$$", "w")) == NULL)

  {

    fprintf(stderr, "Cannot open output file.\n");

    return 1;

  }

  _dos_getftime(fileno(stream), &date, &time);

  printf("File date: 0x%x\n",date);

  printf("File time: 0x%x\n",time);

  fclose(stream);

  return 0;

}


Beispiel _dos_setftime
/* Beispiel _dos_setftime */

#include <stdio.h>

#include <dos.h>

int main()

{

  FILE *stream;

  unsigned date, time;

  if ((stream = fopen("TEST.$$$", "w")) == NULL)

  {

    fprintf(stderr, "Cannot open output file.\n");

    return 1;

  }

  _dos_getftime(fileno(stream), &date, &time);

  printf("File year of TEST.$$$: %d\n",((date >> 9) & 0x7f) + 1980);

  date = (date & 0x1ff) | (21 << 9);

  _dos_setftime(fileno(stream), date, time);

  printf("Set file year to 2001.\n");

  fclose(stream);

  return 0;

}


Beispiel puts
/* Beispiel puts */

#include <stdio.h>

int main(void)

{

   char string[] = "This is an example output string\n";

   puts(string);

   return 0;

}


Beispiel gets
/* Beispiel gets */

#include <stdio.h>

int main(void)

{

   char string[80];

   printf("Input a string:");

   gets(string);

   printf("The string input was: %s\n", string);

   return 0;

}


Beispiel puttext
/* Beispiel puttext */

#include <conio.h>

int main(void)

{

   char buffer[512];

    /* Gibt einen Text an die Konsole */

   clrscr();

   gotoxy(20, 12);

   cprintf("This is a test.  Press any key to continue ...");

   getch();

    /* holt den Bildschirminhalt ab */

   gettext(20, 12, 36, 21,buffer);

   clrscr();

    /* Legt die markierten Zeichen zurück auf den Bildschirm */

   gotoxy(20, 12);

   puttext(20, 12, 36, 21, buffer);

   getch();

   return 0;

}


Beispiel gettext
/* Beispiel gettext */

#include <conio.h>

char buffer[4096];

int main(void)

{

   int i;

   clrscr();

   for (i = 0; i <= 20; i++)

      cprintf("Line #%d\r\n", i);

   gettext(1, 1, 80, 25, buffer);

   gotoxy(1, 25);

   cprintf("Press any key to clear screen...");

   getch();

   clrscr();

   gotoxy(1, 25);

   cprintf("Press any key to restore screen...");

   getch();

   puttext(1, 1, 80, 25, buffer);

   gotoxy(1, 25);

   cprintf("Press any key to quit...");

   getch();

   return 0;

}


Beispiel _dos_gettime
/* Beispiel _dos_gettime */

#include   <dos.h>

int main(void)

{

  struct dostime_t t;

  _dos_gettime(&t);

  printf("The current time is: %2d:%02d:%02d.%02d\n", t.hour, t.minute,

    t.second, t.hsecond);

  return 0;

}


Beispiel _dos_settime
/* Beispiel _dos_settime */

#include <dos.h>

#include <process.h>

#include <stdio.h>

int main(void)

{

  struct dostime_t reset;

  reset.hour    = 17;

  reset.minute  = 0;

  reset.second  = 0;

  reset.hsecond = 0;

  printf("Setting time to 5 PM.\n");

  _dos_settime(&reset);

  system("time");

  return 0;

}


Beispiel gettime
/* Beispiel gettime */

#include   <stdio.h>

#include   <dos.h>

int main(void)

{

   struct  time t;

   gettime(&t);

   printf("The current time is: %2d:%02d:%02d.%02d\n",

          t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);

   return 0;

}


Beispiel settime
/* Beispiel settime */

#include <stdio.h>

#include <dos.h>

int main(void)

{

   struct  time t;

   gettime(&t);

   printf("The current minute is: %d\n", t.ti_min);

   printf("The current hour is: %d\n", t.ti_hour);

   printf("The current hundredth of a second is: %d\n", t.ti_hund);

   printf("The current second is: %d\n", t.ti_sec);

    /* Addiert 1 zu den Minuten des Strukturelementes und ruft settime auf */

   t.ti_min++;

   settime(&t);

   return 0;

}


Beispiel _dos_getvect und _dos_setvect
/* Beispiel _dos_getvect und _dos_setvect */

#include <stdio.h>

#include <dos.h>

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

void interrupt get_out(__CPPARGS);     /* Interrupt-Prototyp */

void interrupt (*oldfunc)(__CPPARGS);  /* Interrupt-Funktionszeiger */

int looping = 1;

int main(void)

{

  puts("Press <Shift><PrtSc> to terminate");

   /* speichert den alten Interrupt */

  oldfunc  = _dos_getvect(5);

   /* installiert den Interrupt-Handler */

  _dos_setvect(5,get_out);

   /* macht nichts */

  while (looping);

   /* stellt die ursprüngliche Interrupt-Routine wieder her */

  _dos_setvect(5,oldfunc);

  puts("Success");

  return 0;

}

void interrupt get_out(__CPPARGS) {

  looping = 0;              /* Ändert die globale Variable, um aus der Schleife herauszukommen */

}


Beispiel getvect und setvect
/* Beispiel getvect und setvect */

 /* * * * * * * * * * * * * * *

HINWEIS: Das ist eine Interrupt-Serviceroutine.

Sie können dieses Programm nicht mit angeschaltetem

Test-Stacküberlauf compileren und eine ausführbare

Datei erhalten, die korrekt abläuft.

 * * * * * * * * * * * * * * */

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#define INTR 0X1C     /* Der Interrupt für Uhrenschläge */

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

void interrupt ( *oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS)

{

 /* Erhöhen des globalen Zeigers */

   count++;

 /* Aufrufen der alten Routine */

oldhandler();

}

int main(void)

{

 /* Speichern des alten Interrupt-Vektors */

   oldhandler = getvect(INTR);

 /* Installieren des neuen Interrupt-Handlers */

   setvect(INTR, handler);

 /* Schleife, bis der Zähler 20 übersteigt */

while (count < 20)

      printf("count is %d\n",count);

 /* Zurücksetzen auf den alten Interrupt-Handler */

   setvect(INTR, oldhandler);

   return 0;

}


Beispiel getw
/* Beispiel getw */

#include <stdio.h>

#include <stdlib.h>

#define FNAME "test.$$$"

int main(void)

{

FILE *fp;

int word;

 /* Plaziert das Wort in einer Datei */

fp = fopen(FNAME, "wb");

if (fp == NULL)

{

printf("Error opening file %s\n", FNAME);

      exit(1);

   }

   word = 94;

   putw(word,fp);

   if (ferror(fp))

       printf("Error writing to file\n");

   else

       printf("Successful write\n");

   fclose(fp);

    /* Öffnet die Datei erneut */

   fp = fopen(FNAME, "rb");

   if (fp == NULL)

   {

      printf("Error opening file %s\n", FNAME);

      exit(1);

   }

    /* Extrahiert das Wort */

   word = getw(fp);

   if (ferror(fp))

       printf("Error reading file\n");

   else

       printf("Successful read: word = %d\n", word);

    /* Aufräumen */

   fclose(fp);

   unlink(FNAME);

   return 0;

}


Beispiel putw
/* Beispiel putw */

#include <stdio.h>

#include <stdlib.h>

#define FNAME "test.$$$"

int main(void)

{

   FILE *fp;

   int word;

    /* Plaziert das Wort in einer Datei */

   fp = fopen(FNAME, "wb");

   if (fp == NULL)

   {

      printf("Error opening file %s\n", FNAME);

      exit(1);

   }

   word = 94;

   putw(word,fp);

   if (ferror(fp))

       printf("Error writing to file\n");

   else

       printf("Successful write\n");

   fclose(fp);

    /* Öffnet die Datei erneut */

   fp = fopen(FNAME, "rb");

   if (fp == NULL)

   {

      printf("Error opening file %s\n", FNAME);

      exit(1);

   }

    /* Extrahiert das Wort */

   word = getw(fp);

   if (ferror(fp))

       printf("Error reading file\n");

   else

       printf("Successful read: word = %d\n", word);

    /* Aufräumen */

   fclose(fp);

   unlink(FNAME);

   return 0;

}


Beispiel gmtime
/* Beispiel gmtime */

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <dos.h>

 /* Pazifische Standardeinstellungen für Zeit & Tageslicht */

char *tzstr = "TZ=PST8PDT";

int main(void)

{

   time_t t;

   struct tm *gmt, *area;

   putenv(tzstr);

   tzset();

   t = time(NULL);

   area = localtime(&t);

   printf("Local time is: %s", asctime(area));

   gmt = gmtime(&t);

   printf("GMT is:        %s", asctime(gmt));

   return 0;

}


Beispiel localtime
/* Beispiel localtime */

#include <time.h>

#include <stdio.h>

#include <dos.h>

int main(void)

{

   time_t timer;

   struct tm *tblock;

    /* Erhält die Tageszeit */

   timer = time(NULL);

    /* Wandelt Datum und Zeit in eine Struktur um */

   tblock = localtime(&timer);

   printf("Local time is: %s", asctime(tblock));

   return 0;

}


Beispiel heapcheck und _heapchk
/* Beispiel heapcheck und _heapchk */

#include <stdio.h>

#include <alloc.h>

#define NUM_PTRS  10

#define NUM_BYTES 16

int main(void)

{

   char *array[ NUM_PTRS ];

   int i;

   for( i = 0; i < NUM_PTRS; i++ )

      array[ i ] = (char *) malloc( NUM_BYTES );

   for( i = 0; i < NUM_PTRS; i += 2 )

      free( array[ i ] );

   if( heapcheck() == _HEAPCORRUPT )

      printf( "Heap is corrupted.\n" );

   else

      printf( "Heap is OK.\n" );

   return 0;

}


farheapcheck example
/* Beispiel farheapcheck */

#include <stdio.h>

#include <alloc.h>

#define NUM_PTRS  10

#define NUM_BYTES 16

int main(void)

{

char far *array[ NUM_PTRS ];

int i;

  for( i = 0; i < NUM_PTRS; i++ )

  array[ i ] = (char far *) farmalloc( NUM_BYTES );

  for( i = 0; i < NUM_PTRS; i += 2 )

  farfree( array[ i ] );

  if( farheapcheck() == _HEAPCORRUPT )

    printf( "Heap is corrupted.\n" );

  else

    printf( "Heap is OK.\n" );

  return 0;

}


Beispiel heapchecknode
/* Beispiel heapchecknode */

#include <stdio.h>

#include <alloc.h>

#define NUM_PTRS  10

#define NUM_BYTES 16

int main(void)

{

   char *array[ NUM_PTRS ];

   int i;

   for( i = 0; i < NUM_PTRS; i++ )

      array[ i ] = (char *) malloc( NUM_BYTES );

   for( i = 0; i < NUM_PTRS; i += 2 )

      free( array[ i ] );

   for( i = 0; i < NUM_PTRS; i++ )

   {

      printf( "Node %2d ", i );

      switch( heapchecknode( array[ i ] ) )

      {

         case _HEAPEMPTY:

              printf( "No heap.\n" );

              break;

         case _HEAPCORRUPT:

              printf( "Heap corrupt.\n" );

              break;

         case _BADNODE:

              printf( "Bad node.\n" );

              break;

         case _FREEENTRY:

              printf( "Free entry.\n" );

              break;

         case _USEDENTRY:

              printf( "Used entry.\n" );

              break;

         default:

              printf( "Unknown return code.\n" );

               break;

      }

   }

   return 0;

}


Beispiel heapfillfree
/* Beispiel heapfillfree und heapcheckfree */

#include <stdio.h>

#include <alloc.h>

#include <mem.h>

#define NUM_PTRS  10

#define NUM_BYTES 16

int main(void)

{

   char *array[ NUM_PTRS ];

   int i;

   int res;

   for( i = 0; i < NUM_PTRS; i++ )

      array[ i ] = (char *) malloc( NUM_BYTES );

   for( i = 0; i < NUM_PTRS; i += 2 )

      free( array[ i ] );

   if( heapfillfree( 1 ) < 0 )

   {

      printf( "Heap corrupted.\n" );

      return 1;

   }

   for( i = 1; i < NUM_PTRS; i += 2 )

      memset( array[ i ], 0, NUM_BYTES );

   res = heapcheckfree( 1 );

   if( res < 0 )

      switch( res )

      {

         case _HEAPCORRUPT:

              printf( "Heap corrupted.\n" );

              return 1;

         case _BADVALUE:

              printf( "Bad value in free space.\n" );

              return 1;

         default:

              printf( "Unknown error.\n" );

              return 1;

      }

   printf( "Test successful.\n" );

   return 0;

}


Beispiel heapwalk
/* Beispiel heapwalk */

#include <stdio.h>

#include <alloc.h>

#define NUM_PTRS  10

#define NUM_BYTES 16

int main( void )

{

   struct heapinfo hi;

char *array[ NUM_PTRS ];

   int i;

   for( i = 0; i < NUM_PTRS; i++ )

      array[ i ] = (char *) malloc( NUM_BYTES );

   for( i = 0; i < NUM_PTRS; i += 2 )

      free( array[ i ] );

   hi.ptr = NULL;

   printf( "   Size   Status\n" );

   printf( "   ----   ------\n" );

   while( heapwalk( &hi ) == _HEAPOK )

   printf( "%7u    %s\n", hi.size, hi.in_use ? "used" : "free" );

   return 0;

}


Beispiel _rtl_heapwalk
/* Beispiel _rtl_heapwalk */

#include <stdio.h>

#include <malloc.h>

#include <alloc.h>

#define NUM_PTRS  10

#define NUM_BYTES 16

#if defined(__FLAT__)

int main( void )

{

struct heapinfo hi;

char *array[ NUM_PTRS ];

int i;

for( i = 0; i < NUM_PTRS; i++ )

array[ i ] = (char *) malloc( NUM_BYTES );

for( i = 0; i < NUM_PTRS; i += 2 )

free( array[ i ] );

hi.ptr = NULL;

printf( "   Size   Status\n" );

printf( "   ----   ------\n" );

while( _rtl_heapwalk( &hi ) == _HEAPOK )

printf( "%7u    %s\n", hi.size, hi.in_use ? "used" : "free" );

return 0;

}

#endif


Beispiel inp
/* Beispiel inp */

#include <stdio.h>

#include <dos.h>

int main(void)

{

   int result;

   int port = 0;   /* serieller Port 0 */

   result = inport(port);

   printf("Word read from port %d = 0x%X\n", port, result);

   return 0;

}


Beispiel inpw
/* Beispiel inpw */

#include <stdio.h>

#include <conio.h>

int main(void)

{

  unsigned result;

  unsigned port = 0;

  result = inpw(port);

  printf("Word read from port %d = 0x%X\n", port, result);

  return 0;

}


Beispiel outp
/* Beispiel outp */

#include <stdio.h>

#include <conio.h>

int main(void)

{

  unsigned port = 0;

  int value;

  value = outp(port, 'C');

  printf("Value %c sent to port number %d\n", value, port);

  return 0;

}


Beispiel outpw
/* Beispiel outpw */

#include <stdio.h>

#include <conio.h>

int main(void)

{

  unsigned value;

  unsigned port = 0;

  value = outpw(port, 64);

  printf("Value %d sent to port number %d\n", value, port);

  return 0;

}


Beispiel inport
/* Beispiel inport */

#include <stdio.h>

#include <dos.h>

int main(void)

{

  int result;

  int port = 0;

  result = inport(port);

  printf("Word read from port %d = 0x%X\n", port, result);

  return 0;

}


Beispiel inportb
/* Beispiel inportb */

#include <stdio.h>

#include <conio.h>

int main(void)

{

   unsigned char result;

   int port = 0;            /* serieller Port 1 */

   result = inportb(port);

   printf("Byte read from port %d = 0x%X\n", port, result);

   return 0;

}


Beispiel outport
/* Beispiel outport */

#include <conio.h>

#include <stdio.h>

int main(void)

{

   int port = 0;

   int value = 'C';

   outport(port, value);

   printf("Value %d sent to port number %d\n", value, port);

   return 0;

}


Beispiel outportb
/* Beispiel outportb */

#include <stdio.h>

#include <dos.h>

int main(void)

{

int port = 0;

char value = 'C';

outportb(port, value);

   printf("Value %c sent to port number %d\n", value, port);

return 0;

}


Beispiel int86
/* Beispiel int86 */

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#define VIDEO 0x10

void movetoxy(int x, int y)

{

union REGS regs;

   regs.h.ah = 2;   /* setzt die Position des Cursors */

regs.h.dh = y;

   regs.h.dl = x;

   regs.h.bh = 0;   /* Videoseite 0 */

int86(VIDEO, &regs, &regs);

}

int main(void)

{

clrscr();

movetoxy(35, 10);

printf("Hello\n");

return 0;

}


Beispiel int86x
/* Beispiel int86x */

#include <dos.h>

#include <process.h>

#include <stdio.h>

int main(void)

{

char filename[80];

union REGS inregs, outregs;

struct SREGS segregs;

printf("Enter filename: ");

gets(filename);

inregs.h.ah = 0x43;

inregs.h.al = 0x21;

inregs.x.dx = FP_OFF(filename);

segregs.ds = FP_SEG(filename);

int86x(0x21, &inregs, &outregs, &segregs);

   printf("File attribute: %X\n", outregs.x.cx);

   return 0;

}


Beispiel intdos
/* Beispiel intdos */

#include <stdio.h>

#include <dos.h>

 /* löscht den Dateinamen; liefert 0 im Erfolgsfall und einen Wert ungleich Null sonst */

int delete_file(char near *filename)

{

   union REGS regs;

   int ret;

   regs.h.ah = 0x41;

 /* Löscht Datei */

   regs.x.dx = (unsigned) filename;

   ret = intdos(&regs, &regs);

    /* Wenn das Carry-Flag gesetzt ist, trat ein Fehler auf */

   return(regs.x.cflag ? ret : 0);

}

int main(void)

{

   int err;

   err = delete_file("NOTEXIST.$$$");

   if (!err)

      printf("Able to delete NOTEXIST.$$$\n");

   else

      printf("Not Able to delete NOTEXIST.$$$\n");

   return 0;

}


Beispiel intdosx
/* Beispiel intdosx */

#include <stdio.h>

#include <dos.h>

 /* löscht den Dateinamen; liefert 0 bei Erfolg zurück,

ansonsten einen Wert ungleich Null */

int delete_file(char far *filename)

{

   union REGS regs; struct SREGS sregs;

   int ret;

   regs.h.ah = 0x41;                       /* löscht Datei */

   regs.x.dx = FP_OFF(filename);

   sregs.ds = FP_SEG(filename);

   ret = intdosx(&regs, &regs, &sregs);

    /* Wenn das Carry-Flag gesetzt ist, trat ein Fehler auf */

   return(regs.x.cflag ? ret : 0);

}

int main(void)

{

   int err;

   err = delete_file("NOTEXIST.$$$");

   if (!err)

      printf("Able to delete NOTEXIST.$$$\n");

   else

      printf("Not Able to delete NOTEXIST.$$$\n");

   return 0;

}


Beispiel itoa
/* Beispiel itoa */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   int number = 12345;

   char string[25];

   itoa(number, string, 10);

   printf("integer = %d string = %s\n", number, string);

   return 0;

}


Beispiel ltoa
/* Beispiel ltoa */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   char string[25];

   long value = 123456789L;

   ltoa(value,string,10);

   printf("number = %ld  string = %s\n", value, string);

   return 0;

}


Beispiel ultoa
/* Beispiel ultoa */

#include <stdlib.h>

#include <stdio.h>

int main( void )

{

   unsigned long lnumber = 3123456789L;

   char string[25];

   ultoa(lnumber,string,10);

   printf("string = %s  unsigned long = %lu\n",string,lnumber);

   return 0;

}


Beispiel keep
/* Beispiel keep */

 /* * * * * * * * * * * * *

HINWEIS: Das ist eine Interrupt-Serviceroutine. Sie können dieses Programm nicht mit angeschaltetem Test-Stacküberlauf compileren und eine ausführbare Datei erhalten, die korrekt abläuft.

Verursacht durch die Natur dieser Funktion ist es möglich, daß die Funktion des Formulars, das zum Zählen der Anzahl von Paragraphen verwendet wird, nicht in allen Fällen arbeitet. Gebrauchen sie es mit Vorsicht!

Speicherresidente (Terminate Stay Resident, TSR) Programme sind komplex und es wird keine andere Unterstützung für sie bereitgestellt.

Weitere Informationen entnehmen Sie bitte Ihrer technischen Dokumentation von MS-DOS.

 * * * * * * * * * * * * */

#include <dos.h>

 /* Der Interrupt für Uhrenschläge */

#define INTR 0x1C

 /* Bildschirmattribute (blau auf grau) */

#define ATTR 0x7900

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

 /* Reduziert die Länge des Heaps und Stacks, um ein Programm im Speicher kleiner zu machen */

extern unsigned _heaplen = 1024;

extern unsigned _stklen  = 512;

void interrupt ( *oldhandler)(__CPPARGS);

typedef unsigned int (far *s_arrayptr);

void interrupt handler(__CPPARGS)

{

   s_arrayptr screen[80];

   static int count;

 /* Der Videospeicher für einen farbigen Bildschirm liegt bei B800:0000.

   For a monochrome system use B000:000 */

   screen[0] = (s_arrayptr) MK_FP(0xB800,0);

 /* Erhöht den Zähler und hält ihn zwischen 0 und 9 */

   count++;

   count %= 10;

 /* Legt eine Zahl auf den Bildschirm */

   screen[0][79] = count + '0' + ATTR;

 /* Ruft den alten Interrupt-Handler auf */

   oldhandler();

}

int main(void)

{

 /* erhält die Adresse des aktuellen Interrupts

   für den Uhrschlag */

oldhandler = getvect(INTR);

 /* Installieren des neuen Interrupt-Handlers */

setvect(INTR, handler);

 /* * *

_psp ist die Startadresse des Programms im Speicher. Der obere Teil des Stacks befindet sich am Ende des Programms.

Durch die gleichzeitige Verwendung von _SS und _SP ist es möglich, an das Ende des Stacks zu gelangen. Sie könnten es beispielsweise einem Bit von safety space erlauben, sicherzustellen daß genug Platz reserviert wurde:

   (_SS + ((_SP + safety space)/16) - _psp)

* * */

keep(0, (_SS + (_SP/16) - _psp));

return 0;

}


Beispiel localeconv
/* Beispiel localeconv */

#include <locale.h>

#include <stdio.h>

int main(void)

{

   struct lconv ll;

   struct lconv *conv = &ll;

 /* Liest die lokale Umwandlungsstruktur */

   conv = localeconv();

 /* Zeigt die Struktur an */

  printf("Decimal Point                 : %s\n", conv-> decimal_point);

  printf("Thousands Separator           : %s\n", conv-> thousands_sep);

  printf("Grouping                      : %s\n", conv-> grouping);

  printf("International Currency symbol : %s\n", conv-> int_curr_symbol);

  printf("$ thousands separator         : %s\n", conv-> mon_thousands_sep);

  printf("$ grouping                    : %s\n", conv-> mon_grouping);

  printf("Positive sign                 : %s\n", conv-> positive_sign);

  printf("Negative sign                 : %s\n", conv-> negative_sign);

  printf("International fraction digits : %d\n", conv-> int_frac_digits);

  printf("Fraction digits               : %d\n", conv-> frac_digits);

  printf("Positive $ symbol precedes    : %d\n", conv-> p_cs_precedes);

  printf("Positive sign space separation: %d\n", conv-> p_sep_by_space);

  printf("Negative $ symbol precedes    : %d\n", conv-> n_cs_precedes);

  printf("Negative sign space separation: %d\n", conv-> n_sep_by_space);

  printf("Positive sign position        : %d\n", conv-> p_sign_posn);

  printf("Negative sign position        : %d\n", conv-> n_sign_posn);

  return 0;

}


Beispiel setlocale
/* Beispiel setlocale */

#include <locale.h>

#include <stdio.h>

int main(void)

{

   char *old_locale;

    /* Die einzige von Borland C++ unterstützte Locale-Einstellung ist "C" */

   old_locale = setlocale(LC_ALL,"C");

   printf("Old locale was %s\n",old_locale);

   return 0;

}


Beispiel locking
/* Beispiel locking */

#include <io.h>

#include <fcntl.h>

#include <process.h>

#include <share.h>

#include <stdio.h>

#include <sys\locking.h>

int main(void)

{

  int handle, status;

  long length;

   /* DOS SHARE.EXE muß für eine Datei geladen sein, die an eine Funktion gebunden ist */

  handle = sopen("c:\\autoexec.bat", O_RDONLY,SH_DENYNO);

  if (handle < 0) {

    printf("sopen failed\n");

    exit(1);

  }

  length = filelength(handle);

  status = locking(handle,LK_LOCK,length/2);

  if (status == 0)

    printf("lock succeeded\n");

  else

    perror("lock failed");

  status = locking(handle,LK_UNLCK,length/2);

  if (status == 0)

    printf("unlock succeeded\n");

  else

    perror("unlock failed");

  close(handle);

  return 0;

}


Beispiel lock
/* Beispiel lock */

#include <io.h>

#include <fcntl.h>

#include <sys\stat.h>

#include <process.h>

#include <share.h>

#include <stdio.h>

int main(void)

{

   int handle, status;

   long length;

    /* DOS Share.exe muß geladen sein, damit */

    /* eine Datei richtig an eine Funktion gebunden werden kann */

   handle = sopen("c:\\autoexec.bat",

      O_RDONLY,SH_DENYNO,S_IREAD);

   if (handle < 0)

   {

      printf("sopen failed\n");

      exit(1);

   }

   length = filelength(handle);

   status = lock(handle,0L,length/2);

   if (status == 0)

      printf("lock succeeded\n");

   else

      printf("lock failed\n");

   status = unlock(handle,0L,length/2);

   if (status == 0)

      printf("unlock succeeded\n");

   else

      printf("unlock failed\n");

   close(handle);

   return 0;

}


Beispiel unlock
/* Beispiel unlock */

#include <io.h>

#include <fcntl.h>

#include <sys\stat.h>

#include <process.h>

#include <share.h>

#include <stdio.h>

int main(void)

{

   int handle, status;

   long length;

   handle = sopen("c:\\autoexec.bat",O_RDONLY,SH_DENYNO,S_IREAD);

   if (handle < 0)

   {

       printf("sopen failed\n");

       exit(1);

   }

   length = filelength(handle);

   status = lock(handle,0L,length/2);

   if (status == 0)

      printf("lock succeeded\n");

   else

      printf("lock failed\n");

   status = unlock(handle,0L,length/2);

   if (status == 0)

      printf("unlock succeeded\n");

   else

      printf("unlock failed\n");

   close(handle);

   return 0;

}


Beispiel log
/* Beispiel log */

#include <math.h>

#include <stdio.h>

int main(void)

{

   double result;

   double x = 8.6872;

   result = log(x);

   printf("The natural log of %lf is %lf\n", x, result);

   return 0;

}


Beispiel log10
/* Beispiel log10 */

#include <math.h>

#include <stdio.h>

int main(void)

{

   double result;

   double x = 800.6872;

   result = log10(x);

   printf("The common log of %lf is %lf\n", x, result);

   return 0;

}


Beispiel _lrotl undund _lrotr
/* Beispiel _lrotl und _lrotr */

#include <stdlib.h>

#include <stdio.h>

 /* Funktionsprototypen */

int lrotl_example(void);

int lrotr_example(void);

 /* Beispiel lrotl */

int lrotl_example(void)

{

   unsigned long result;

   unsigned long value = 100;

   result = _lrotl(value,1);

   printf("The value %lu rotated left one bit is: %lu\n", value, result);

   return 0;

}

 /* Beispiel lrotr */

int lrotr_example(void)

{

   unsigned long result;

   unsigned long value = 100;

   result = _lrotr(value,1);

   printf("The value %lu rotated right one bit is: %lu\n", value, result);

   return 0;

}

int main(void)

{

   lrotl_example();

   lrotr_example();

   return 0;

}


Beispiel _rotl und _rotr
/* Beispiel _rotl und _rotr */

#include <stdlib.h>

#include <stdio.h>

 /* Beispiel rotl */

int rotl_example(void)

{

   unsigned value, result;

   value = 32767;

   result = _rotl(value, 1);

   printf("The value %u rotated left one bit is: %u\n", value, result);

   return 0;

}

 /* Beispiel rotr */

int rotr_example(void)

{

   unsigned value, result;

   value = 32767;

   result = _rotr(value, 1);

   printf("The value %u rotated right one bit is: %u\n", value, result);

   return 0;

}

int main(void)

{

   rotl_example();

   rotr_example();

   return 0;

}


Beispiel _makepath
/* Beispiel _makepath */

#include <dir.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

  char s[_MAX_PATH];

  char drive[_MAX_DRIVE];

  char dir[_MAX_DIR];

  char file[_MAX_FNAME];

  char ext[_MAX_EXT];

  getcwd(s,_MAX_PATH);            /* Erhält aktuelles Arbeitsverzeichnis */

 if (s[strlen(s)-1] != '\\')

     strcat(s,"\\");              /* Hängt ein abschließendes Zeichen \ an */

  _splitpath(s,drive,dir,file,ext);  /* Teilt den String in separate

    Elemente auf */

  strcpy(file,"DATA");

  strcpy(ext,".TXT");

  _makepath(s,drive,dir,file,ext);  /* Verschmilzt alles in einem String */

  puts(s);                        /* Zeigt den Erbebnisstring an */

  return 0;

}


Beispiel _splitpath
/* Beispiel _splitpath */

#include <dir.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

  char s[_MAX_PATH];

  char drive[_MAX_DRIVE];

  char dir[_MAX_DIR];

  char file[_MAX_FNAME];

  char ext[_MAX_EXT];

   /* erhält aktuelles Arbeitsverzeichnis */

  getcwd(s,_MAX_PATH);

  if (s[strlen(s)-1] != '\\')

   /* Hängt das abschließende Backslash-Zeichen \ an */

    strcat(s,"\\");

   /* Teilt den String in separate Elemente auf */

  _splitpath(s,drive,dir,file,ext);

  strcpy(file,"DATA");

  strcpy(ext,".TXT");

   /* Verschmilzt alles in einen String */

  _makepath(s,drive,dir,file,ext);

   /* Zeigt den Ergebnisstring an */

  puts(s);

  return 0;

}


Beispiel fnsplit
/* Beispiel fnsplit */

#include <stdlib.h>

#include <stdio.h>

#include <dir.h>

int main(void)

{

    char *s;

    char drive[MAXDRIVE];

    char dir[MAXDIR];

    char file[MAXFILE];

    char ext[MAXEXT];

    int flags;

    s=getenv("COMSPEC");  /* Erhält den Umgebungsparameter comspec */

    flags=fnsplit(s,drive,dir,file,ext);

    printf("Command processor info:\n");

    if(flags & DRIVE)

       printf("\tdrive: %s\n",drive);

    if(flags & DIRECTORY)

       printf("\tdirectory: %s\n",dir);

    if(flags & FILENAME)

       printf("\tfile: %s\n",file);

    if(flags & EXTENSION)

       printf("\textension: %s\n",ext);

    return 0;

}


Beispiel fnmerge
/* Beispiel fnmerge */

#include <string.h>

#include <stdio.h>

#include <dir.h>

int main(void)

{

   char s[MAXPATH];

   char drive[MAXDRIVE];

   char dir[MAXDIR];

   char file[MAXFILE];

   char ext[MAXEXT];

   getcwd(s,MAXPATH);               /* Erhält das aktuelle Arbeitsverzeichnis */

   strcat(s,"\\");                  /* hängt das abschließendes Zeichen \ an */

   fnsplit(s,drive,dir,file,ext);   /* Teilt den String in verschiedene Elemente auf */

   strcpy(file,"DATA");

   strcpy(ext,".TXT");

   fnmerge(s,drive,dir,file,ext);    /* Verschmilzt alles in einen String */

   puts(s);                          /* Zeigt den Ergebnis-String an */

   return 0;

}


Beispiel memmove
/* Beispiel memmove */

#include <string.h>

#include <stdio.h>

int main(void)

{

  char *dest = "abcdefghijklmnopqrstuvwxyz0123456789";

  char *src = "******************************";

  printf("destination prior to memmove: %s\n", dest);

  memmove(dest, src, 26);

  printf("destination after memmove:    %s\n", dest);

  return 0;

}


Beispiel memccpy
/* Beispiel memccpy */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char *src = "This is the source string";

   char dest[50];

   char *ptr;

   ptr = (char *) memccpy(dest, src, 'c', strlen(src));

   if (ptr)

   {

      *ptr = '\0';

      printf("The character was found: %s\n", dest);

   }

   else

      printf("The character wasn't found\n");

   return 0;

}


Beispiel memcpy
/* Beispiel memcpy */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char src[] = "******************************";

   char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";

   char *ptr;

   printf("destination before memcpy: %s\n", dest);

   ptr = (char *) memcpy(dest, src, strlen(src));

   if (ptr)

      printf("destination after memcpy: %s\n", dest);

   else

      printf("memcpy failed\n");

   return 0;

}


Beispiel memcmp
/* Beispiel memcmp */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *buf1 = "aaa";

   char *buf2 = "bbb";

   char *buf3 = "ccc";

   int stat;

   stat = memcmp(buf2, buf1, strlen(buf2));

   if (stat > 0)

      printf("buffer 2 is greater than buffer 1\n");

   else

      printf("buffer 2 is less than buffer 1\n");

   stat = memcmp(buf2, buf3, strlen(buf2));

   if (stat > 0)

      printf("buffer 2 is greater than buffer 3\n");

   else

      printf("buffer 2 is less than buffer 3\n");

   return 0;

}


Beispiel memicmp
/* Beispiel memicmp */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *buf1 = "ABCDE123";

   char *buf2 = "abcde456";

   int stat;

   stat = memicmp(buf1, buf2, 5);

   printf("The strings to position 5 are ");

   if (stat)

      printf("not ");

   printf("the same\n");

   return 0;

}


Beispiel _dos_open
/* Beispiel _dos_open */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <dos.h>

int main(void)

{

  int handle;

  unsigned nbytes;

  char msg[] = "Hello world\n";

  if (_dos_open("TEST.$$$", O_RDWR, &handle) != 0) {

    perror("Unable to open TEST.$$$");

    return 1;

  }

  if (_dos_write(handle, msg, strlen(msg),&nbytes) != 0)

    perror("Unable to write to TEST.$$$");

  printf("%u bytes written to TEST.$$$\n",nbytes);

  _dos_close(handle);

  return 0;

}


Beispiel _rtl_open
/* Beispiel _rtl_open */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char msg[] = "Hello world";

   if ((handle = _rtl_open("TEST.$$$", O_RDWR)) == -1)

   {

      perror("Error:");

      return 1;

   }

   _rtl_write(handle, msg, strlen(msg));

   _rtl_close(handle);

   return 0;

}


Beispiel sopen
/* Beispiel sopen */

 /*      Laden Sie share, bevor Sie dieses Beispielprogramm ablaufen starten.

*/

 #include <io.h>

 #include <fcntl.h>

 #include <sys\stat.h>

 #include <process.h>

 #include <share.h>

 #include <stdio.h>

 #include       <stdlib.h>

 int main(void)

 {

    int handle,

        handle1;

    handle = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);

    if      (handle == -1)

    {

      perror (sys_errlist[errno]);

      exit (1);

    }

    if (!handle)

    {

       printf("sopen failed\n");

       exit(1);

    }

     /*      Attempt sopen for write.

    */

    handle1 = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);

    if      (handle1 == -1)

    {

      perror (sys_errlist[errno]);

      exit (1);

    }

    if (!handle1)

    {

       printf("sopen failed\n");

       exit(1);

    }

    close (handle);

    close (handle1);

    return 0;

}


Beispiel open
/* Beispiel open */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char msg[] = "Hello world";

   if ((handle = open("TEST.$$$", O_CREAT | O_TEXT)) == -1)

   {

      perror("Error:");

      return 1;

   }

   write(handle, msg, strlen(msg));

   close(handle);

   return 0;

}


Beispiel cprintf
/* Beispiel cprintf */

#include <conio.h>

int main(void)

{

    /* Leert den Bildschirm */

   clrscr();

    /* Erzeugt ein Textfenster */

   window(10, 10, 80, 25);

    /* Einen Text im Fenster ausgeben */

   cprintf("Hello world\r\n");

    /* Auf einen Schlüssel warten */

   getch();

   return 0;

}


Beispiel fprintf
/* Beispiel fprintf */

#include <stdio.h>

int main(void)

{

   FILE *stream;

   int i = 100;

   char c = 'C';

   float f = 1.234;

    /* Öffnen einer Datei zum Aktualisieren */

   stream = fopen("DUMMY.FIL", "w+");

    /* Schreiben von Daten in die Datei */

   fprintf(stream, "%d %c %f", i, c, f);

    /* Schließen der Datei */

   fclose(stream);

   return 0;

}


Beispiel printf
/* Beispiel printf */

#include <stdio.h>

#include <string.h>

#define I 555

#define R 5.5

int main(void)

{

   int i,j,k,l;

   char buf[7];

   char *prefix = buf;

   char tp[20];

   printf("prefix  6d      6o      8x        10.2e        "

          "10.2f\n");

   strcpy(prefix,"%");

   for (i = 0; i < 2; i++)

   {

      for (j = 0; j < 2; j++)

         for (k = 0; k < 2; k++)

            for (l = 0; l < 2; l++)

            {

               if (i==0)  strcat(prefix,"-");

               if (j==0)  strcat(prefix,"+");

               if (k==0)  strcat(prefix,"#");

               if (l==0)  strcat(prefix,"0");

               printf("%5s |",prefix);

               strcpy(tp,prefix);

               strcat(tp,"6d |");

               printf(tp,I);

               strcpy(tp,"");

               strcpy(tp,prefix);

               strcat(tp,"6o |");

               printf(tp,I);

               strcpy(tp,"");

               strcpy(tp,prefix);

               strcat(tp,"8x |");

               printf(tp,I);

               strcpy(tp,"");

               strcpy(tp,prefix);

               strcat(tp,"10.2e |");

               printf(tp,R);

               strcpy(tp,prefix);

               strcat(tp,"10.2f |");

               printf(tp,R);

               printf("  \n");

               strcpy(prefix,"%");

            }

       }

   return 0;

}


Beispiel sprintf
/* Beispiel sprintf */

#include <stdio.h>

#include <math.h>

int main(void)

{

   char buffer[80];

   sprintf(buffer, "An approximation of Pi is %f\n", M_PI);

   puts(buffer);

   return 0;

}


Beispiel vfprintf
/* Beispiel vfprintf */

#include <stdio.h>

#include <stdlib.h>

#include <stdarg.h>

FILE *fp;

int vfpf(char *fmt, ...)

{

   va_list argptr;

   int cnt;

   va_start(argptr, fmt);

   cnt = vfprintf(fp, fmt, argptr);

   va_end(argptr);

   return(cnt);

}

int main(void)

{

   int inumber = 30;

   float fnumber = 90.0;

   char string[4] = "abc";

   fp = tmpfile();

   if (fp == NULL)

   {

      perror("tmpfile() call");

      exit(1);

   }

   vfpf("%d %f %s", inumber, fnumber, string);

   rewind(fp);

   fscanf(fp,"%d %f %s", &inumber, &fnumber, string);

   printf("%d %f %s\n", inumber, fnumber, string);

   fclose(fp);

   return 0;

}


Beispiel vprintf
/* Beispiel vprintf */

#include <stdio.h>

#include <stdarg.h>

int vpf(char *fmt, ...)

{

   va_list argptr;

   int cnt;

   va_start(argptr, fmt);

   cnt = vprintf(fmt, argptr);

   va_end(argptr);

   return(cnt);

}

int main(void)

{

   int inumber = 30;

   float fnumber = 90.0;

   char *string = "abc";

   vpf("%d %f %s\n",inumber,fnumber,string);

   return 0;

}


Beispiel vsprintf
/* Beispiel vsprintf */

#include <stdio.h>

#include <conio.h>

#include <stdarg.h>

char buffer[80];

int vspf(char *fmt, ...)

{

   va_list argptr;

   int cnt;

   va_start(argptr, fmt);

   cnt = vsprintf(buffer, fmt, argptr);

   va_end(argptr);

   return(cnt);

}

int main(void)

{

   int inumber = 30;

   float fnumber = 90.0;

   char string[4] = "abc";

   vspf("%d %f %s", inumber, fnumber, string);

   printf("%s\n", buffer);

   return 0;

}


Beispiel _dos_read
/* Beispiel _dos_read */

#include <stdio.h>

#include <fcntl.h>

#include <dos.h>

int main(void)

{

  int handle;

  unsigned bytes;

  char buf[10];

   /* Sieht nach einer Datei TEST.$$$ im aktuellen Arbeitsverzeichnis und

    versucht, 10 Bytes davon zu lesen. Um dieses Beispiel zu verwenden,

    sollten Sie die Datei TEST.$$$ erzeugen.*/

  if (_dos_open("TEST.$$$", O_RDONLY, &handle) != 0) {

    perror("Unable to open TEST.$$$");

    return 1;

  }

  if (_dos_read(handle, buf, 10, &bytes) != 0) {

    perror("Unable to read from TEST.$$$");

    return 1;

  }

  else

    printf("_dos_read: %d bytes read.\n", bytes);

  return 0;

}


Beispiel _rtl_read
/* Beispiel _rtl_read */

#include <stdio.h>

#include <io.h>

#include <alloc.h>

#include <fcntl.h>

#include <process.h>

#include <sys\stat.h>

int main(void)

{

   void *buf;

   int handle, bytes;

   buf = malloc(10);

 /*

Sieht nach einer Datei TEST.$$$ im aktuellen Arbeitsverzeichnis und versucht, 10 Bytes davon zu lesen. Um dieses Beispiel zu verwenden, sollten Sie die Datei TEST.$$$ erzeugen.

*/

   if ((handle =

       open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)

   {

      printf("Error Opening File\n");

      exit(1);

   }

   if ((bytes = _rtl_read(handle, buf, 10)) == -1) {

      printf("Read Failed.\n");

      exit(1);

   }

   else {

      printf("_rtl_read: %d bytes read.\n", bytes);

   }

   return 0;

}


Beispiel read
/* Beispiel read */

#include <stdio.h>

#include <io.h>

#include <alloc.h>

#include <fcntl.h>

#include <process.h>

#include <sys\stat.h>

int main(void)

{

   void *buf;

   int handle, bytes;

   buf = malloc(10);

 /*

Sieht nach einer Datei TEST.$$$ im aktuellen Arbeitsverzeichnis und versucht, 10 Bytes davon zu lesen. Um dieses Beispiel zu verwenden, sollten Sie die Datei TEST.$$$ erzeugen.

 */

   if ((handle =

      open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)

   {

      printf("Error Opening File\n");

      exit(1);

   }

   if ((bytes = read(handle, buf, 10)) == -1) {

      printf("Read Failed.\n");

      exit(1);

   }

   else {

      printf("Read: %d bytes read.\n", bytes);

   }

   return 0;

}


Beispiel farrealloc
/* Beispiel farrealloc */

#include <stdio.h>

#include <alloc.h>

int main(void)

{

   char far *fptr;

   char far *newptr;

   fptr = (char far *) farmalloc(16);

   printf("First address: %Fp\n", fptr);

 /*

Wir verwenden einen zweiten Zeiger newptr. Wenn dann farrealloc() NULL zurückliefert, wird unser Originalzeiger nicht auf NULL gesetzt.

 */

   newptr = (char far *) farrealloc(fptr,64);

   printf("New address  : %Fp\n", newptr);

   if (newptr != NULL)

      farfree(newptr);

   return 0;

}


Beispiel realloc
/* Beispiel realloc */

#include <stdio.h>

#include <alloc.h>

#include <string.h>

int main(void)

{

   char *str;

    /* Speicherplatz für einen String reservieren */

   str = (char *) malloc(10);

    /* Kopiert "Hello" in einen String */

   strcpy(str, "Hello");

   printf("String is %s\n  Address is %p\n", str, str);

   str = (char *) realloc(str, 20);

   printf("String is %s\n  New address is %p\n", str, str);

    /* Speicherplatz freigeben */

   free(str);

   return 0;

}


Beispiel cscanf
/* Beispiel cscanf */

#include <conio.h>

int main(void)

{

   char string[80];

    /* Leert den Bildschirm */

   clrscr();

    /* Fordert den Anwender zur Eingabe auf */

   cprintf("Enter a string with no spaces:");

    /* Liest den Input */

   cscanf("%s", string);

    /* Zeigt an, was gelesen wurde */

   cprintf("\r\nThe string entered is: %s", string);

   return 0;

}


Beispiel fscanf
/* Beispiel fscanf */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   int i;

   printf("Input an integer: ");

    /* Liest ein Integer aus dem

      Stream für die Standardeingabe */

   if (fscanf(stdin, "%d", &i))

      printf("The integer read was: %i\n", i);

   else

   {

      fprintf(stderr, "Error reading an integer from stdin.\n");

      exit(1);

   }

   return 0;

}


Beispiel scanf
/* Beispiel scanf */

#include <stdio.h>

#include <conio.h>

int main(void)

{

   char label[20];

   char name[20];

   int entries = 0;

   int loop, age;

   double salary;

   struct Entry_struct

   {

      char  name[20];

      int   age;

      float salary;

   } entry[20];

 /* Eingabe einer Marke als einen auf 20 Zeichen begrenzter String */

   printf("\n\nPlease enter a label for the chart: ");

   scanf("%20s", label);

   fflush(stdin);   /* Leert den Eingabestrom in Falle einer ungültigen Eingabe */

 /* Eingabe der Anzahl von Einträgen in Form einer ganzen Zahl */

  printf("How many entries will there be? (less than 20) ");

  scanf("%d", &entries);

  fflush(stdin);    /* Leert den Eingabestrom in Falle einer ungültigen Eingabe */

 /* Eingabe eines Namens mit der Beschränkung auf Groß- und Kleinbuchstaben */

   for (loop=0;loop<entries;++loop)

   {

      printf("Entry %d\n", loop);

      printf("  Name   : ");

      scanf("%[A-Za-z]", entry[loop].name);

      fflush(stdin);   /* Leert den Eingabestrom in Falle einer ungültigen Eingabe */

 /* Eingabe eines Alters in Form einer ganzen Zahl */

      printf("  Age    : ");

      scanf("%d", &entry[loop].age);

      fflush(stdin);   /* Leert den Eingabestrom in Falle einer ungültigen Eingabe */

 /* Eingabe eines Gehaltes als float */

      printf("  Salary : ");

      scanf("%f", &entry[loop].salary);

      fflush(stdin);  /* Leert den Eingabestrom in Falle einer ungültigen Eingabe */

   }

 /* Eingabe von Name, Alter und Gehalt als string, integer und double */

   printf("\nPlease enter your name, age and salary\n");

   scanf("%20s %d %lf", name, &age, &salary);

 /* Ausdrucken der Eingabedaten */

   printf("\n\nTable %s\n",label);

   printf("Compiled by %s  age %d  $%15.2lf\n", name, age, salary);

   printf("-----------------------------------------------------\n");

   for (loop=0;loop<entries;++loop)

      printf("%4d | %-20s | %5d | %15.2lf\n",

         loop + 1,

         entry[loop].name,

         entry[loop].age,

         entry[loop].salary);

   printf("-----------------------------------------------------\n");

   return 0;

}


Beispiel sscanf
/* Beispiel sscanf */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

char *names[4] = {"Peter", "Mike", "Shea", "Jerry"};

#define NUMITEMS 4

int main(void)

{

   int   loop;

   char  temp[4][80];

   char  name[20];

   int   age;

   long  salary;

 /* Löscht den Bildschirm */

   clrscr();

 /* Erzeugt die Daten für Name, Alter und Gehalt */

   for (loop=0; loop < NUMITEMS; ++loop)

      sprintf(temp[loop], "%s %d %ld", names[loop], random(10) + 20, random(5000) + 27500L);

 /* Druckt die Titelleiste */

   printf("%4s | %-20s | %5s | %15s\n", "#", "Name", "Age", "Salary");

   printf("   --------------------------------------------------\n");

 /* Eingabe der Daten für Namen, Alter und Gehalt */

   for (loop=0; loop < NUMITEMS; ++loop)

      {

      sscanf(temp[loop],"%s %d %ld", &name, &age, &salary);

      printf("%4d | %-20s | %5d | %15ld\n", loop + 1, name, age, salary);

      }

   return 0;

}


Beispiel vfscanf
/* Beispiel vfscanf */

#include <stdio.h>

#include <stdlib.h>

#include <stdarg.h>

FILE *fp;

int vfsf(char *fmt, ...)

{

   va_list  argptr;

   int cnt;

   va_start(argptr, fmt);

   cnt = vfscanf(fp, fmt, argptr);

   va_end(argptr);

   return(cnt);

}

int main(void)

{

   int inumber = 30;

   float fnumber = 90.0;

         char string[4] = "abc";

   fp = tmpfile();

   if (fp == NULL)

   {

      perror("tmpfile() call");

      exit(1);

   }

   fprintf(fp,"%d %f %s\n",inumber,fnumber,string);

   rewind(fp);

   vfsf("%d %f %s",&inumber,&fnumber,string);

   printf("%d %f %s\n",inumber,fnumber,string);

   fclose(fp);

   return 0;

}


Beispiel vscanf
/* Beispiel vscanf */

#include <stdio.h>

#include <conio.h>

#include <stdarg.h>

int vscnf(char *fmt, ...)

{

   va_list argptr;

   int cnt;

   printf("Enter an integer, a float, and a string (e.g. i,f,s,)\n");

   va_start(argptr, fmt);

   cnt = vscanf(fmt, argptr);

   va_end(argptr);

   return(cnt);

}

int main(void)

{

   int inumber;

   float fnumber;

   char string[80];

   vscnf("%d, %f, %s", &inumber, &fnumber, string);

   printf("%d %f %s\n", inumber, fnumber, string);

   return 0;

}


Beispiel vsscanf
/* Beispiel vsscanf */

#include <stdio.h>

#include <conio.h>

#include <stdarg.h>

char buffer[80] = "30 90.0 abc";

int vssf(char *fmt, ...)

{

   va_list  argptr;

   int cnt;

   fflush(stdin);

   va_start(argptr, fmt);

   cnt = vsscanf(buffer, fmt, argptr);

   va_end(argptr);

   return(cnt);

}

int main(void)

{

   int inumber;

   float fnumber;

   char string[80];

   vssf("%d %f %s", &inumber, &fnumber, string);

   printf("%d %f %s\n", inumber, fnumber, string);

   return 0;

}


Beispiel setbuf
/* Beispiel setbuf */

#include <stdio.h>

 /* BUFSIZ ist in stdio.h definiert */

char outbuf[BUFSIZ];

int main(void)

{

    /* Hängt einen Puffer an einen Stream für die Standardausgabe */

   setbuf(stdout, outbuf);

    /* Legt mehrere Zeichen in den Puffer */

   puts("This is a test of buffered output.\n\n");

   puts("This output will go into outbuf\n");

   puts("and won't appear until the buffer\n");

   puts("fills up or we flush the stream.\n");

    /* Leert den Ausgabepuffer */

   fflush(stdout);

   return 0;

}


Beispiel setvbuf
/* Beispiel setvbuf */

#include <stdio.h>

int main(void)

{

   FILE *input, *output;

   char bufr[512];

   input = fopen("file.in", "r+b");

   output = fopen("file.out", "w");

    /* Baut einen Eingabe-Stream für minimalen Laufwerkszugriff auf

      und verwendet dabei den eigenen Zeichenpuffer */

if (setvbuf(input, bufr, _IOFBF, 512) != 0)

      printf("failed to set up buffer for input file\n");

   else

      printf("buffer set up for input file\n");

    /* Baut einen Ausgabe-Stream für das Puffern von Zeilen auf

     und verwendet Platz, der durch den indirekten Aufruf von
     malloc erhalten wird */

   if (setvbuf(output, NULL, _IOLBF, 132) != 0)

      printf("failed to set up buffer for output file\n");

   else

      printf("buffer set up for output file\n");

    /* Führt Ein-/Ausgabe in Dateien hier aus */

    /* Schließt Dateien */

   fclose(input);

   fclose(output);

   return 0;

}


Beispiel spawnl
/* Beispiel spawnl */

#include <process.h>

#include <stdio.h>

#include <conio.h>

void spawnl_example(void)

{

   int result;

   clrscr();

   result = spawnl(P_WAIT, "bcc.exe", "bcc.exe", NULL);

   if (result == -1)

   {

      perror("Error from spawnl");

      exit(1);

   }

}

int main(void)

{

  spawnl_example();

  return 0;

}


Beispiel spawnle
/* Beispiel spawnle */

#include <process.h>

#include <stdio.h>

#include <conio.h>

void spawnle_example(void)

 {

   int result;

   clrscr();

   result = spawnle(P_WAIT, "bcc.exe", "bcc.exe", NULL, NULL);

   if (result == -1)

   {

      perror("Error from spawnle");

      exit(1);

   }

}

int main(void)

{

  spawnle_example();

  return 0;

}


Beispiel spawnlp
/* Beispiel spawnlp */

#include <process.h>

#include <stdio.h>

#include <errno.h>

void main(int argc, char *argv[])

{

   int i;

   printf("Command line arguments:\n");

   for (i=0; i<argc; ++i)

      printf("[%2d] : %s\n", i, argv[i]);

   printf("About to exec child with arg1 arg2 ...\n");

   spawnlp(P_WAIT, "C:\\BC4\\BIN\\BCC.EXE", "C:\\BC4\\BIN\\BCC.EXE", argv[1], argv[2], NULL);

   perror("exec error");

   exit(1);

}


Beispiel spawnlpe
/* Beispiel spawnlpe */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main( int argc, char *argv[], char **envp )

{

   int i;

   printf("Command line arguments:\n");

   for (i=0; i < argc; ++i)

      printf("[%2d] %s\n", i, argv[i]);

   printf("About to exec child with arg1 arg2 ...\n");

   spawnlpe(P_WAIT, "C:\\BC4\\BIN\\BCC.EXE", "C:\\BC4\\BIN\\BCC.EXE", argv[1], argv[2], NULL, envp);

   perror("exec error");

   exit(1);

   return 0;

}


Beispiel spawnv
/* Beispiel spawnv */

#include <process.h>

#include <stdio.h>

#include <errno.h>

void main(int argc, char *argv[])

{

   int i;

   printf("Command line arguments:\n");

   for (i=0; i<argc; ++i)

      printf("[%2d] : %s\n", i, argv[i]);

   printf("About to exec child with arg1 arg2 ...\n");

spawnv(P_WAIT, "C:\\BC4\\BIN\\BCC.EXE", argv);

   perror("exec error");

   exit(1);

 }


Beispiel spawnve
/* Beispiel spawnve */

#include <process.h>

#include <stdio.h>

#include <errno.h>

void main(int argc, char *argv[], char **envp)

{

   int i;

   printf("Command line arguments:\n");

   for (i=0; i<argc; ++i)

      printf("[%2d] : %s\n", i, argv[i]);

   printf("About to exec child with arg1 arg2 ...\n");

spawnve(P_WAIT, "C:\\BC4\\BIN\\TDMEM.EXE", argv, envp);

   perror("exec error");

   exit(1);

}


Beispiel spawnvp
/* Beispiel spawnvp */

#include <process.h>

#include <stdio.h>

#include <errno.h>

void main(int argc, char *argv[])

{

   int i;

   printf("Command line arguments:\n");

   for (i=0; i<argc; ++i)

      printf("[%2d] : %s\n", i, argv[i]);

   printf("About to exec child with arg1 arg2 ...\n");

   spawnvp(P_WAIT, "C:\\BC4\\BIN\\BCC.EXE", argv);

   perror("exec error");

   exit(1);

}


Beispiel spawnvpe
/* Beispiel spawnvpe */

#include <process.h>

#include <stdio.h>

#include <errno.h>

int main( int argc, char *argv[], char **envp )

{

int i;

printf("Command line arguments:\n");

for (i=0; i < argc; ++i)

printf("[%2d] %s\n", i, argv[i]);

printf("About to exec child with arg1 arg2 ...\n");

spawnvpe(P_WAIT, "C:\\BC4\\BIN\\BCC.EXE", argv, envp);

perror("exec error");

exit(1);

   return 0;

}


Beispiel strcmp
/* Beispiel strcmp */

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

int ptr;

ptr = strcmp(buf2, buf1);

if (ptr > 0)

      printf("buffer 2 is greater than buffer 1\n");

   else

      printf("buffer 2 is less than buffer 1\n");

   ptr = strcmp(buf2, buf3);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 3\n");

   else

      printf("buffer 2 is less than buffer 3\n");

   return 0;

}


Beispiel strcmpi
/* Beispiel strcmpi */

 /* Beispiel strncmpi */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char *buf1 = "BBB", *buf2 = "bbb";

   int ptr;

   ptr = strcmpi(buf2, buf1);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 1\n");

   if (ptr < 0)

      printf("buffer 2 is less than buffer 1\n");

   if (ptr == 0)

      printf("buffer 2 equals buffer 1\n");

   return 0;

}


Beispiel stricmp
/* Beispiel stricmp */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char *buf1 = "BBB", *buf2 = "bbb";

   int ptr;

   ptr = stricmp(buf2, buf1);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 1\n");

   if (ptr < 0)

      printf("buffer 2 is less than buffer 1\n");

   if (ptr == 0)

      printf("buffer 2 equals buffer 1\n");

   return 0;

}


Beispiel _strnextc
 /* Beispiel _strnextc */

#include <tchar.h>

#include <stdio.h>

int main()

{

   unsigned int retval = 0;

   const unsigned char *string = "ABC";

   retval = _strnextc(string);

   printf("The starting character:%c", retval);

   retval = _strnextc(++string);

   printf("\nThe next character:%c", retval);

   return 0;

}

 /***

The starting character:A

The next character:B

***/


Beispiel strspn
/* Beispiel strspn */

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

   char *string1 = "1234567890";

   char *string2 = "123DC8";

   int length;

   length = strspn(string1, string2);

   printf("Character where strings differ is at position %d\n", length);

   return 0;

}


Beispiel strcspn
/* Beispiel strcspn */

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

   char *string1 = "1234567890";

   char *string2 = "747DC8";

   int length;

   length = strcspn(string1, string2);

   printf("Character where strings intersect is at position %d\n",

          length);

   return 0;

}


Beispiel _strerror
/* Beispiel _strerror */

#include <stdio.h>

#include <errno.h>

int main(void)

{

   char *buffer;

   buffer = strerror(errno);

   printf("Error: %s\n", buffer);

   return 0;

}


Beispiel strerror
/* Beispiel strerror */

#include <stdio.h>

#include <errno.h>

int main(void)

{

  char *buffer;

  buffer = strerror(errno);

  printf("Error: %s\n", buffer);

  return 0;

}


Beispiel strlwr
/* Beispiel strlwr */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *string = "Borland International";

   printf("string prior to strlwr: %s\n", string);

   strlwr(string);

   printf("string after strlwr:    %s\n", string);

   return 0;

}


Beispiel strupr
/* Beispiel strupr */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

    /* Wandelt einen String in Großbuchstaben um */

   ptr = strupr(string);

   printf("%s\n", ptr);

   return 0;

}


Beispiel strncmp
/* Beispiel strncmp */

#include <string.h>

#include <stdio.h>

int  main(void)

{

   char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";

   int ptr;

   ptr = strncmp(buf2,buf1,3);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 1\n");

   else

      printf("buffer 2 is less than buffer 1\n");

   ptr = strncmp(buf2,buf3,3);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 3\n");

   else

      printf("buffer 2 is less than buffer 3\n");

   return(0);

}


Beispiel strncmpi
/* Beispiel strncmpi */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char *buf1 = "BBBccc", *buf2 = "bbbccc";

   int ptr;

   ptr = strncmpi(buf2,buf1,3);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 1\n");

   if (ptr < 0)

      printf("buffer 2 is less than buffer 1\n");

   if (ptr == 0)

      printf("buffer 2 equals buffer 1\n");

   return 0;

}


Beispiel strnicmp
/* Beispiel strnicmp */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char *buf1 = "BBBccc", *buf2 = "bbbccc";

   int ptr;

   ptr = strnicmp(buf2, buf1, 3);

   if (ptr > 0)

      printf("buffer 2 is greater than buffer 1\n");

   if (ptr < 0)

      printf("buffer 2 is less than buffer 1\n");

   if (ptr == 0)

      printf("buffer 2 equals buffer 1\n");

   return 0;

}


Beispiel strtod
/* Beispiel strtod */

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

   char input[80], *endptr;

   double value;

   printf("Enter a floating point number:");

   gets(input);

   value = strtod(input, &endptr);

   printf("The string is %s the number is %lf\n", input, value);

   return 0;

}


Beispiel strtol
/* Beispiel strtol */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   char *string = "87654321", *endptr;

   long lnumber;

    /* strtol wandelt einen String in ganze Zahlen um */

   lnumber = strtol(string, &endptr, 10);

   printf("string = %s  long = %ld\n", string, lnumber);

   return 0;

}


Beispiel strtoul
/* Beispiel strtoul */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   char *string = "87654321", *endptr;

   unsigned long lnumber;

   lnumber = strtoul(string, &endptr, 10);

   printf("string = %s  long = %lu\n",

   string, lnumber);

   return 0;

}


Beispiel textattr
/* Beispiel textattr */

#include <conio.h>

int main(void)

{

   int i;

   clrscr();

   for (i=0; i<9; i++)

   {

       textattr(i + ((i+1) << 4));

       cprintf("This is a test\r\n");

   }

   return 0;

}


Beispiel textbackground und textcolor
/* Beispiel textbackground und textcolor */

#include <conio.h>

int main(void)

{

   int i, j;

   clrscr();

   for (i=0; i<9; i++)

   {

       for (j=0; j<80; j++)

          cprintf("C");

       cprintf("\r\n");

       textcolor(i+1);

       textbackground(i);

   }

   return 0;

}


Beispiel time
/* Beispiel time */

#include <time.h>

#include <stdio.h>

#include <dos.h>

int main(void)

{

   time_t t;

   t = time(NULL);

   printf("The number of seconds since January 1, 1970 is %ld",t);

   return 0;

}


Beispiel stime
/* Beispiel stime */

#include <stdio.h>

#include <time.h>

int main(void)

{

  time_t t;

  t = time(NULL);

  printf("Current date is %s", ctime(&t));

  t -= 24L*60L*60L;   /* Sichern zur gleichen Zeit am Vortag */

  stime(&t);

  printf("\nNew date is %s", ctime(&t));

   return 0;

}


Beispiel tolower
/* Beispiel tolower */

#include <string.h>

#include <stdio.h>

#include <ctype.h>

int main(void)

{

   int length, i;

   char *string = "THIS IS A STRING";

   length = strlen(string);

   for (i=0; i<length; i++)

   {

       string[i] = tolower(string[i]);

   }

   printf("%s\n",string);

   return 0;

}


Beispiel _tolower
/* Beispiel _tolower */

#include <string.h>

#include <stdio.h>

#include <ctype.h>

int main(void)

{

   int length, i;

   char *string = "THIS IS A STRING.";

   length = strlen(string);

   for (i = 0; i < length; i++) {

       if ((string[i] >= 'A') && (string[i] <= 'Z')){

          string[i] = _tolower(string[i]);

       }

   }

   printf("%s\n",string);

   return 0;

}


Beispiel toupper
/* Beispiel toupper */

#include <string.h>

#include <stdio.h>

#include <ctype.h>

int main(void)

{

   int length, i;

   char *string = "this is a string";

   length = strlen(string);

   for (i=0; i<length; i++)

   {

      string[i] = toupper(string[i]);

   }

   printf("%s\n",string);

   return 0;

}


Beispiel _toupper
/* Beispiel _toupper */

#include <string.h>

#include <stdio.h>

#include <ctype.h>

int main(void)

{

   int length, i;

   char *string = "this is a string.";

   length = strlen(string);

   for (i = 0; i < length; i++) {

      if ((string[i] >= 'a') && (string[i] <= 'z')){

         string[i] = _toupper(string[i]);

         }

   }

   printf("%s\n",string);

   return 0;

}


Beispiel _dos_write
/* Beispiel _dos_write */

#include <dos.h>

#include <string.h>

#include <stdio.h>

int main(void)

{

  unsigned count;

  int handle;

  char buf[11] = "0123456789";

   /* Erzeugen einer Datei, die 10 Bytes enthält */

  if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0)

  {

    perror("Unable to create DUMMY.FIL");

    return 1;

  }

  if (_dos_write(handle, buf, strlen(buf), &count) != 0)

  {

    perror("Unable to write to DUMMY.FIL");

    return 1;

  }

   /* Schließen der Datei */

  _dos_close(handle);

  return 0;

}


Beispiel _rtl_write
/* Beispiel _rtl_write */

#include <stdio.h>

#include <io.h>

#include <alloc.h>

#include <fcntl.h>

#include <process.h>

#include <sys\stat.h>

int main(void)

{

   void *buf;

   int handle, bytes;

   buf = malloc(200);

 /*

Erzeugt eine Datei mit dem Namen TEST.$$$ im aktuellen Verzeichnis und schreibt 200 Bytes hinein. Wenn TEST.$$$ bereits existiert, wird es überschrieben.

 */

   if ((handle = open("TEST.$$$", O_CREAT | O_WRONLY | O_BINARY,

                       S_IWRITE | S_IREAD)) == -1)

   {

      printf("Error Opening File\n");

      exit(1);

   }

   if ((bytes = _rtl_write(handle, buf, 200)) == -1) {

      printf("Write Failed.\n");

      exit(1);

   }

   printf("_rtl_write: %d bytes written.\n",bytes);

   return 0;

}


Beispiel write
/* Beispiel write */

#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys\stat.h>

#include <io.h>

#include <string.h>

int main(void)

{

   int handle;

   char string[40];

   int length, res;

 /*

Erzeugt eine Datei namens "TEST.$$$" im aktuellen Verzeichnis und schreibt einen String hinein. Wenn "TEST.$$$" bereits existiert, wird es überschrieben.

 */

   if ((handle = open("TEST.$$$", O_WRONLY | O_CREAT | O_TRUNC,

                         S_IREAD | S_IWRITE)) == -1)

   {

      printf("Error opening file.\n");

      exit(1);

   }

   strcpy(string, "Hello, world!\n");

   length = strlen(string);

   if ((res = write(handle, string, length)) != length)

   {

      printf("Error writing to the file.\n");

      exit(1);

   }

   printf("Wrote %d bytes to the file.\n", res);

   close(handle);

   return 0;

}


Beispiel getcurdir
/* Beispiel getcurdir */

#include <dir.h>

#include <stdio.h>

#include <string.h>

char *current_directory(char *path)

{

  strcpy(path, "X:\\");       /* Füllt einen String in der Form der Antwort: X:\ */

  path[0] = 'A' + getdisk();     /* Ersetzt X mit dem aktuellen Laufwerksbuchstaben */

  getcurdir(0, path+3);   /* Füllt den Rest des Strings mit dem aktuellen Verzeichnis */

  return(path);

}

int main(void)

{

  char curdir[MAXPATH];

  current_directory(curdir);

  printf("The current directory is %s\n", curdir);

  return 0;

}


Beispiel getenv
/* Beispiel getenv */

#include <stdio.h>

#include <stdlib.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

int main(void)

{

   char *path, *ptr;

   int i = 0;

    /* Erhält die aktuelle Umgebung des Pfades */

   ptr = getenv("PATH");

    /* Legt einen neuen Pfad an */

   path = (char *) malloc(strlen(ptr)+15);

   strcpy(path,"PATH=");

   strcat(path,ptr);

   strcat(path,";c:\\temp");

    /* Ersetzt den aktuellen Pfad und zeigt die aktuelle Umgebung an */

   putenv(path);

   while (_environ[i])

       printf("%s\n",_environ[i++]);

   return 0;

}


Beispiel putenv
/* Beispiel putenv */

#include <stdio.h>

#include <stdlib.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

int main(void)

{

   char *path, *ptr;

   int i = 0;

    /* Erhält die aktuelle Umgebung des Pfades */

   ptr = getenv("PATH");

    /* Legt einen neuen Pfad an */

   path = (char *) malloc(strlen(ptr)+15);

   strcpy(path,"PATH=");

   strcat(path,ptr);

   strcat(path,";c:\\temp");

    /* Ersetzt den aktuellen Pfad und zeigt die aktuelle Umgebung an */

   putenv(path);

   while (_environ[i])

       printf("%s\n",_environ[i++]);

   return 0;

}


Beispiel getpass
/* Beispiel getpass */

#include <conio.h>

int main(void)

{

   char *password;

   password = getpass("Input a password:");

   cprintf("The password is: %s\r\n", password);

   return 0;

}


Beispiel getpid
/* Beispiel getpid */

#include <stdio.h>

#include <process.h>

int main()

{

   printf("This program's process identification number (PID) "

          "number is %X\n", getpid());

   printf("Note: under DOS it is the PSP segment\n");

   return 0;

}


Beispiel gettextinfo
/* Beispiel gettextinfo */

#include <conio.h>

int main(void)

 {

   struct text_info ti;

   gettextinfo(&ti);

   cprintf("window left      %2d\r\n",ti.winleft);

   cprintf("window top       %2d\r\n",ti.wintop);

   cprintf("window right     %2d\r\n",ti.winright);

   cprintf("window bottom    %2d\r\n",ti.winbottom);

   cprintf("attribute        %2d\r\n",ti.attribute);

   cprintf("normal attribute %2d\r\n",ti.normattr);

   cprintf("current mode     %2d\r\n",ti.currmode);

   cprintf("screen height    %2d\r\n",ti.screenheight);

   cprintf("screen width     %2d\r\n",ti.screenwidth);

   cprintf("current x        %2d\r\n",ti.curx);

   cprintf("current y        %2d\r\n",ti.cury);

   return 0;

}


Beispiel getverify
/* Beispiel getverify */

#include <stdio.h>

#include <conio.h>

#include <dos.h>

int main(void)

{

   int verify_flag;

   printf("Enter 0 to set verify flag off\n");

   printf("Enter 1 to set verify flag on\n");

   verify_flag = getch() - 0;

   setverify(verify_flag);

   if (getverify())

      printf("DOS verify flag is on\n");

   else

      printf("DOS verify flag is off\n");

   return 0;

}


Beispiel setverify
/* Beispiel setverify */

#include <stdio.h>

#include <conio.h>

#include <dos.h>

int main(void)

{

    int verify_flag;

    printf("Enter 0 to set verify flag off\n");

    printf("Enter 1 to set verify flag on\n");

    verify_flag = getch() - 0;

    setverify(verify_flag);

    if (getverify())

       printf("DOS verify flag is on\n");

    else

       printf("DOS verify flag is off\n");

    return 0;

}


Beispiel gotoxy
/* Beispiel gotoxy */

#include <conio.h>

int main(void)

{

    clrscr();

    gotoxy(35, 12);

    cprintf("Hello world");

    getch();

    return 0;

}


Beispiel harderr
/* Beispiel harderr */

 /*

Dieses Programm wird Laufwerksfehler finden und den

Anwender zu Aktionen auffordern. Versuchen Sie, es

ohne eingelegte Diskette im Laufwerk A: zu starten,

um seine Funktionen zu sehen

*/

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#define IGNORE  0

#define RETRY   1

#define ABORT   2

int buf[500];

 /*

Definiert die Fehlermeldungen für gefundene Laufwerksprobleme

*/

 static char *err_msg[] = {

     "write protect",

  "unknown unit",

     "drive not ready",

     "unknown command",

     "data error (CRC)",

     "bad request",

  "seek error",

     "unknown media type",

     "sector not found",

     "printer out of paper",

     "write fault",

     "read fault",

     "general failure",

  "reserved",

     "reserved",

     "invalid disk change"

};

error_win(char *msg)

{

    int retval;

    cputs(msg);

 /*

Fordert den Anwender zur Betätigung einer Taste auf, um abzubrechen, zu wiederholen oder zu ignorieren

*/

    while(1)

    {

  retval= getch();

  if (retval == 'a' || retval == 'A')

  {

      retval = ABORT;

      break;

  }

  if (retval == 'r' || retval == 'R')

  {

retval = RETRY;

      break;

  }

  if (retval == 'i' || retval == 'I')

  {

      retval = IGNORE;

      break;

  }

    }

    return(retval);

}

 /*

Das Pragma warn -par warn -par verringert die Warnungen,

die wegen der Nichtverwendung der Parameter not_used1

und not_used2 durch den Handler auftreten.

*/

#pragma warn -par

void handler(unsigned int ax, unsigned int not_used1, unsigned int *not_used2)

{

static char msg[80];

unsigned di;

int drive;

int errorno;

di= _DI;

 /*

Wenn es sich nicht um einen Laufwerksfehler handelt,

dann hat eine anderes Gerät Probleme

*/

if (ax < 0)

{

 /* Meldet den Fehler */

error_win("Device error");

 /* und kehrt direkt zu dem Programm zurück, das zum Abbruch aufforderte */

_hardretn(ABORT);

}

 /* Andernfalls war es ein Laufwerksfehler */

drive = ax & 0x00FF;

errorno = di & 0x00FF;

 /* Meldet die Art des Fehlers */

sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",

  err_msg[errorno], 'A' + drive);

 /*

Kehrt über den DOS-Interrupt 0x23 mit Abbrechen, Wiederholen oder

Ignorieren so zum Programm zurück, wie es der Anwender eingegeben hat.

*/

_hardresume(error_win(msg));

// return ABORT;

}

#pragma warn +par

int main(void)

{

 /*

Installiert unseren Handler auf dem Interrupt, an dem das Problem mit der Hardware auftrat

*/

_harderr(handler);

   clrscr();

   printf("Make sure there is no disk in drive A:\n");

   printf("Press any key ....\n");

   getch();

   printf("Trying to access drive A:\n");

   printf("fopen returned %p\n",fopen("A:temp.dat", "w"));

   return 0;

}


Beispiel hardresume
/* Beispiel hardresume */

 /*

Dieses Programm wird Laufwerksfehler finden und den

Anwender zu Aktionen auffordern. Versuchen Sie, es

ohne eingelegte Diskette im Laufwerk A: zu starten,

um seine Funktionen zu sehen

*/

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#define IGNORE  0

#define RETRY   1

#define ABORT   2

int buf[500];

 /*

Definiert die Fehlermeldungen für gefundene Laufwerksprobleme

*/

static char *err_msg[] = {

    "write protect",

 "unknown unit",

 "drive not ready",

    "unknown command",

    "data error (CRC)",

    "bad request",

    "seek error",

    "unknown media type",

    "sector not found",

    "printer out of paper",

    "write fault",

    "read fault",

    "general failure",

 "reserved",

 "reserved",

    "invalid disk change"

};

error_win(char *msg)

{

    int retval;

    cputs(msg);

 /*

Fordert den Anwender zur Betätigung einer Taste auf, um abzubrechen, zu wiederholen oder zu ignorieren

*/

    while(1)

    {

  retval= getch();

  if (retval == 'a' || retval == 'A')

  {

      retval = ABORT;

      break;

  }

  if (retval == 'r' || retval == 'R')

  {

retval = RETRY;

break;

  }

  if (retval == 'i' || retval == 'I')

  {

      retval = IGNORE;

      break;

  }

    }

    return(retval);

}

 /*

Das Pragma warn -par warn -par verringert die Warnungen,

die wegen der Nichtverwendung der Parameter not_used1

und not_used2 durch den Handler auftreten.

*/

#pragma warn -par

void handler(unsigned int ax, unsigned int not_used1, unsigned int *not_used2)

{

    static char msg[80];

 unsigned di;

 int drive;

 int errorno;

    di= _DI;

  /*

Wenn es sich nicht um einen Laufwerksfehler handelt,

dann hat eine anderes Gerät Probleme

 */

    if (ax < 0)

 {

  /* Meldet den Fehler */

 error_win("Device error");

  /* und kehrt direkt zu dem Programm zurück, das zum Abbruch aufforderte */

 _hardretn(ABORT);

    }

  /* Andernfalls war es ein Laufwerksfehler */

    drive = ax & 0x00FF;

    errorno = di & 0x00FF;

  /* Meldet die Art des Fehlers */

 sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",

      err_msg[errorno], 'A' + drive);

  /*

Kehrt über den DOS-Interrupt 0x23 mit Abbrechen, Wiederholen oder

Ignorieren so zum Programm zurück, wie es der Anwender eingegeben hat.

 */

 _hardresume(error_win(msg));

// return ABORT;

 }

 #pragma warn +par

 int main(void)

 {

  /*

Installiert unseren Handler auf dem Interrupt, an dem das Problem mit der Hardware auftrat

 */

 _harderr(handler);

 clrscr();

 printf("Make sure there is no disk in drive A:\n");

 printf("Press any key ....\n");

    getch();

    printf("Trying to access drive A:\n");

    printf("fopen returned %p\n",fopen("A:temp.dat", "w"));

 return 0;

}


Beispiel highvideo
/* Beispiel highvideo */

#include <conio.h>

int main(void)

{

clrscr();

lowvideo();

cprintf("Low Intensity text\r\n");

highvideo();

gotoxy(1,2);

cprintf("High Intensity Text\r\n");

return 0;

}


Beispiel lowvideo
/* Beispiel lowvideo */

#include <conio.h>

int main(void)

{

clrscr();

highvideo();

   cprintf("High Intensity Text\r\n");

   lowvideo();

gotoxy(1,2);

   cprintf("Low Intensity Text\r\n");

return 0;

}


Beispiel normvideo
/* Beispiel normvideo */

#include <conio.h>

int main(void)

{

    normvideo();

    cprintf("NORMAL Intensity Text\r\n");

 return 0;

}


Beispiel hypot
/* Beispiel hypot */

#include <stdio.h>

#include <math.h>

int main(void)

{

 double result;

 double x = 3.0;

    double y = 4.0;

    result = hypot(x, y);

    printf("The hypotenuse is: %lf\n", result);

    return 0;

}


Beispiel imag
/* Beispiel imag */

#include <iostream.h>

#include <complex.h>

int main(void)

{

 double x = 3.1, y = 4.2;

    complex z = complex(x,y);

    cout << "z = " << z << "\n";

 cout << "  has real part = " << real(z) << "\n";

    cout << "  and imaginary real part = " << imag(z) << "\n";

    cout << "z has complex conjugate = " << conj(z) << "\n";

 return 0;

}


Beispiel insline
/* Beispiel insline */

#include <conio.h>

int main(void)

{

    clrscr();

    cprintf("INSLINE inserts an empty line in the text window\r\n");

 cprintf("at the cursor position using the current text\r\n");

    cprintf("background color.  All lines below the empty one\r\n");

    cprintf("move down one line and the bottom line scrolls\r\n");

 cprintf("off the bottom of the window.\r\n");

    cprintf("\r\nPress any key to continue:");

 gotoxy(1, 3);

 getch();

    insline();

    getch();

 return 0;

}


Beispiel intr
/* Beispiel intr */

#include <stdio.h>

#include <string.h>

#include <dir.h>

#include <dos.h>

#define CF 1   /* Carry-Flag */

int main(void)

{

    char directory[80];

 struct REGPACK reg;

    printf("Enter directory to change to: ");

    gets(directory);

    reg.r_ax = 0x3B << 8;          /* Schiebt 3Bh zu AH */

    reg.r_dx = FP_OFF(directory);

    reg.r_ds = FP_SEG(directory);

    intr(0x21, &reg);

    if (reg.r_flags & CF)

       printf("Directory change failed\n");

    getcwd(directory, 80);

    printf("The current directory is: %s\n", directory);

    return 0;

}


Beispiel ioctl
/* Beispiel ioctl */

#include <stdio.h>

#include <dir.h>

#include <io.h>

int main(void)

{

    int stat;

     /* Verwendet func 8 um festzulegen, ob das voreingestellte Laufwerk entfernt werden kann */

    stat = ioctl(0, 8, 0, 0);

    if (!stat)

       printf("Drive %c is removable.\n", getdisk() + 'A');

    else

       printf("Drive %c is not removable.\n", getdisk() + 'A');

    return 0;

}


Beispiel isatty
/* Beispiel isatty */

#include <stdio.h>

#include <io.h>

int main(void)

{

    int handle;

    handle = fileno(stdprn);

    if (isatty(handle))

       printf("Handle %d is a device type\n", handle);

    else

       printf("Handle %d isn't a device type\n", handle);

    return 0;

}


Beispiel kbhit
/* Beispiel kbhit */

#include <conio.h>

int main(void)

{

 cprintf("Press any key to continue:");

    while (!kbhit())  /* Unternimmt nichts */ ;

    cprintf("\r\nA key was pressed...\r\n");

    return 0;

}


Beispiel ldexp
/* Beispiel ldexp */

#include <stdio.h>

#include <math.h>

int main(void)

{

    double value;

    double x = 2;

     /* ldexp rechnet 2 hoch 3

       und multipliziert das Ergebnis dann mit 2   */

    value = ldexp(x,3);

    printf("The ldexp value is: %lf\n", value);

    return 0;

}


Beispiel setjmp
/* Beispiel setjmp */

#include <stdio.h>

#include <setjmp.h>

#include <stdlib.h>

void subroutine(jmp_buf);

int main(void)

{

    int value;

    jmp_buf jumper;

    value = setjmp(jumper);

    if (value != 0)

    {

       printf("Longjmp with value %d\n", value);

       exit(value);

    }

    printf("About to call subroutine ... \n");

    subroutine(jumper);

    return 0;

}

void subroutine(jmp_buf jumper)

{

    longjmp(jumper,1);

}


Beispiel longjmp
/* Beispiel longjmp */

#include <stdio.h>

#include <setjmp.h>

#include <stdlib.h>

void subroutine(jmp_buf);

int main(void)

{

    int value;

    jmp_buf jumper;

    value = setjmp(jumper);

    if (value != 0)

    {

       printf("Longjmp with value %d\n", value);

       exit(value);

    }

    printf("About to call subroutine ... \n");

    subroutine(jumper);

    return 0;

}

void subroutine(jmp_buf jumper)

{

    longjmp(jumper,1);

}


Beispiel lseek
/* Beispiel lseek */

#include <sys\stat.h>

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

    int handle;

    char msg[] = "This is a test";

    char ch;

     /* Erzeugen einer Datei */

    handle = open("TEST.$$$", O_CREAT | O_RDWR, S_IREAD | S_IWRITE);

     /* Schreiben von Daten in die Datei */

    write(handle, msg, strlen(msg));

     /* Dateizeiger auf den Anfang der Datei stellen */

    lseek(handle, 0L, SEEK_SET);

     /* Liest solange Zeichen aus der Datei, bis wir EOF betätigen */

    do

    {

       read(handle, &ch, 1);

       printf("%c", ch);

    }  while (!eof(handle));

    close(handle);

    return 0;

}


Beispiel malloc
/* Beispiel malloc */

#include <stdio.h>

#include <string.h>

#include <alloc.h>

#include <process.h>

int main(void)

{

    char *str;

     /* Speicherplatz für einen String reservieren */

    if ((str = (char *) malloc(10)) == NULL)

    {

       printf("Not enough memory to allocate buffer\n");

       exit(1);   /* Beendet das Programm, wenn kein Speicher mehr vorhanden ist */

    }

     /* Kopiert "Hallo" in den String */

    strcpy(str, "Hello");

     /* Zeigt den String an */

    printf("String is %s\n", str);

     /* Gibt den Speicher wieder frei */

    free(str);

    return 0;

}


Beispiel _matherr
/* Beispiel _matherr */

#include <math.h>

#include <string.h>

#include <stdio.h>

int matherr (struct exception *a)

{

  if (a->type == DOMAIN)

    if (!strcmp(a->name,"sqrt")) {

      a->retval = sqrt (-(a->arg1));

    return 1;

    }

  return 0;

}

int main(void)

{

  double x = -2.0, y;

  y = sqrt(x);

  printf("Matherr corrected value: %lf\n",y);

  return 0;

}


Beispiel max und min
/* Beispiel max und min */

#include <stdlib.h>

#include <stdio.h>

#ifdef __cplusplus

   int max (int value1, int value2);

   int max(int value1, int value2)

   {

      return ( (value1 > value2) ? value1 : value2);

   }

#endif

int main(void)

{

    int x = 5;

    int y = 6;

    int z;

    z = max(x, y);

    printf("The larger number is %d\n", z);

    return 0;

}


Beispiel memchr
/* Beispiel memchr */

#include <string.h>

#include <stdio.h>

int main(void)

{

    char str[17];

    char *ptr;

    strcpy(str, "This is a string");

    ptr = (char *) memchr(str, 'r', strlen(str));

    if (ptr)

       printf("The character 'r' is at position: %d\n", ptr - str);

    else

       printf("The character was not found\n");

    return 0;

}


Beispiel memset
/* Beispiel memset */

#include <string.h>

#include <stdio.h>

#include <mem.h>

int main(void)

{

    char buffer[] = "Hello world\n";

    printf("Buffer before memset: %s\n", buffer);

    memset(buffer, '*', strlen(buffer) - 1);

    printf("Buffer after memset:  %s\n", buffer);

    return 0;

}


Beispiel mkdir
/* Beispiel mkdir */

#include <stdio.h>

#include <conio.h>

#include <process.h>

#include <dir.h>

#define DIRNAME "testdir.$$$"

int main(void)

{

    int stat;

    stat = mkdir(DIRNAME);

    if (!stat)

           printf("Directory created\n");

    else

    {

       printf("Unable to create directory\n");

       exit(1);

    }

    getch();

    system("dir/p");

    getch();

    stat = rmdir(DIRNAME);

    if (!stat)

           printf("\nDirectory deleted\n");

    else

    {

           perror("\nUnable to delete directory\n");

       exit(1);

    }

    return 0;

}


Beispiel rmdir
/* Beispiel rmdir */

#include <stdio.h>

#include <conio.h>

#include <process.h>

#include <dir.h>

#define DIRNAME "testdir.$$$"

int main(void)

{

    int stat;

    stat = mkdir(DIRNAME);

    if (!stat)

           printf("Directory created\n");

    else

    {

       printf("Unable to create directory\n");

       exit(1);

    }

    getch();

    system("dir/p");

    getch();

    stat = rmdir(DIRNAME);

    if (!stat)

           printf("\nDirectory deleted\n");

    else

    {

           perror("\nUnable to delete directory\n");

       exit(1);

    }

    return 0;

}


Beispiel mktemp
/* Beispiel mktemp */

#include <dir.h>

#include <stdio.h>

int main(void)

{

     /* fname definiert das Template für die

      temporäre Datei.  */

    char *fname = "TXXXXXX", *ptr;

    ptr = mktemp(fname);

    printf("%s\n",ptr);

    return 0;

}


Beispiel mktime
/* Beispiel mktime */

#include <stdio.h>

#include <time.h>

 char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday",

  "Thursday", "Friday", "Saturday", "Unknown"};

int main(void)

{

    struct tm time_check;

    int year, month, day;

 /*  Gibt Jahr, Monat und Tag ein, um den Wochentag zu finden für */

    printf("Year:  ");

    scanf("%d", &year);

    printf("Month: ");

    scanf("%d", &month);

    printf("Day:   ");

    scanf("%d", &day);

 /*  Lädt die Struktur time_check mit den Daten */

    time_check.tm_year = year - 1900;

    time_check.tm_mon  = month - 1;

    time_check.tm_mday = day;

    time_check.tm_hour = 0;

    time_check.tm_min  = 0;

    time_check.tm_sec  = 1;

    time_check.tm_isdst = -1;

 /*  Ruft mktime auf, um in der Struktur das Feld für den Wochentag auszufüllen */

    if (mktime(&time_check) == -1)

       time_check.tm_wday = 7;

 /*  Druckt den Wochentag aus */

    printf("That day is a %s\n", wday[time_check.tm_wday]);

    return 0;

}


Beispiel modf
/* Beispiel modf */

#include <math.h>

#include <stdio.h>

int main(void)

{

    double fraction, integer;

    double number = 100000.567;

    fraction = modf(number, &integer);

    printf("The whole and fractional parts of %lf are %lf and %lf\n",

           number, integer, fraction);

    return 0;

}


Beispiel movedata
/* Beispiel movedata */

#include <mem.h>

#define MONO_BASE 0xB000

char buf[80*25*2];

 /* Speichert den Inhalt des monochromen Bildschirms im Puffer */

void save_mono_screen(char near *buffer)

{

   movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);

}

int main(void)

{

   save_mono_screen(buf);

   return 0;

}


Beispiel movmem
/* Beispiel movmem */

#include <mem.h>

#include <alloc.h>

#include <stdio.h>

#include <string.h>

int main(void)

{

    char *source = "Borland International";

    char *destination;

    int length;

    length = strlen(source);

    destination = (char *) malloc(length + 1);

    movmem(source, destination, length);

    printf("%s\n", destination);

    return 0;

}


Beispiel movetext
/* Beispiel movetext */

#include <conio.h>

#include <string.h>

int main(void)

{

    char *str = "This is a test string";

    clrscr();

    cputs(str);

    getch();

    movetext(1, 1, strlen(str), 2, 10, 10);

    getch();

    return 0;

}


Beispiel norm
/* Beispiel norm */

#include <iostream.h>

#include <complex.h>

int main(void)

{

    double x = 3.1, y = 4.2;

    complex z = complex(x,y);

    cout << "z = " << z << "\n";

    cout << "  has real part = " << real(z) << "\n";

    cout << "  and imaginary real part = " << imag(z) << "\n";

    cout << "z has complex conjugate = " << conj(z) << "\n";

    double mag = sqrt(norm(z));

    double ang = arg(z);

    cout << "The polar form of z is:\n";

    cout << "   magnitude = " << mag << "\n";

    cout << "   angle (in radians) = " << ang << "\n";

    cout << "Reconstructing z from its polar form gives:\n";

    cout << "   z = " << polar(mag,ang) << "\n";

    return 0;

}


Beispiel closedir
/* Beispiel closedir und readdir */

 /* opendir.c - test opendir(), readdir(), closedir() */

#include <dirent.h>

#include <stdio.h>

#include <stdlib.h>

void scandir(char *dirname)

{

   DIR *dir;

   struct dirent *ent;

   printf("First pass on '%s':\n",dirname);

   if ((dir = opendir(dirname)) == NULL)

   {

     perror("Unable to open directory");

     exit(1);

   }

   while ((ent = readdir(dir)) != NULL)

     printf("%s\n",ent->d_name);

   printf("Second pass on '%s':\n",dirname);

   rewinddir(dir);

   while ((ent = readdir(dir)) != NULL)

     printf("%s\n",ent->d_name);

   if (closedir(dir) != 0)

     perror("Unable to close directory");

}

void main(int argc,char *argv[])

{

   if (argc != 2)

   {

     printf("usage: opendir dirname\n");

     exit(1);

   }

   scandir(argv[1]);

   exit(0);

}


Beispiel opendir
/* Beispiel opendir */

  /* opendir.c - test opendir(), readdir(), closedir() */

#include <dirent.h>

#include <stdio.h>

#include <stdlib.h>

void scandir(char *dirname)

{

   DIR *dir;

   struct dirent *ent;

   printf("First pass on '%s':\n",dirname);

   if ((dir = opendir(dirname)) == NULL)

   {

     perror("Unable to open directory");

     exit(1);

   }

   while ((ent = readdir(dir)) != NULL)

     printf("%s\n",ent->d_name);

   printf("Second pass on '%s':\n",dirname);

   rewinddir(dir);

   while ((ent = readdir(dir)) != NULL)

     printf("%s\n",ent->d_name);

   if (closedir(dir) != 0)

     perror("Unable to close directory");

}

void main(int argc,char *argv[])

{

   if (argc != 2)

   {

     printf("usage: opendir dirname\n");

     exit(1);

   }

   scandir(argv[1]);

   exit(0);

}


Beispiel parsfnm
/* Beispiel parsfnm */

#include <process.h>

#include <string.h>

#include <stdio.h>

#include <dos.h>

int main(void)

{

    char line[80];

    struct fcb blk;

     /* Erhält Dateinamen */

    printf("Enter drive and file name (no path; e.g., a:file.dat)\n");

    gets(line);

     /* Legt den Dateinamen in fcb */

    if (parsfnm(line, &blk, 1) == NULL)

       printf("Error in parsfm call\n");

    else

       printf("Drive #%d  Name: %11s\n", blk.fcb_drive, blk.fcb_name);

    return 0;

}


Beispiel peek
/* Beispiel peek */

#include <stdio.h>

#include <conio.h>

#include <dos.h>

int main(void)

{

    int value = 0;

    printf("The current status of your keyboard is:\n");

    value = peek(0x0040, 0x0017);

    if (value & 1)

       printf("Right shift on\n");

    else

       printf("Right shift off\n");

    if (value & 2)

       printf("Left shift on\n");

    else

       printf("Left shift off\n");

    if (value & 4)

       printf("Control key on\n");

    else

       printf("Control key off\n");

    if (value & 8)

       printf("Alt key on\n");

    else

       printf("Alt key off\n");

    if (value & 16)

       printf("Scroll lock on\n");

    else

       printf("Scroll lock off\n");

    if (value & 32)

       printf("Num lock on\n");

    else

       printf("Num lock off\n");

    if (value & 64)

       printf("Caps lock on\n");

    else

       printf("Caps lock off\n");

    return 0;

}


Beispiel perror
/* Beispiel perror */

#include <stdio.h>

int main(void)

{

    FILE *fp;

    fp = fopen("perror.dat", "r");

    if (!fp)

       perror("Unable to open file for reading");

    return 0;

}


Beispiel poke
/* Beispiel poke */

#include <dos.h>

#include <conio.h>

int main(void)

{

    clrscr();

    cprintf("Make sure the scroll lock key is off and press any key\r\n");

    getch();

    poke(0x0000,0x0417,16);

    cprintf("The scroll lock is now on\r\n");

    return 0;

}


Beispiel polar
/* Beispiel polar */

#include <iostream.h>

#include <complex.h>

int main(void)

{

    double x = 3.1, y = 4.2;

    complex z = complex(x,y);

    cout << "z = " << z << "\n";

    cout << "  has real part = " << real(z) << "\n";

    cout << "  and imaginary real part = " << imag(z) << "\n";

    cout << "z has complex conjugate = " << conj(z) << "\n";

    double mag = sqrt(norm(z));

    double ang = arg(z);

    cout << "The polar form of z is:\n";

    cout << "   magnitude = " << mag << "\n";

    cout << "   angle (in radians) = " << ang << "\n";

    cout << "Reconstructing z from its polar form gives:\n";

    cout << "   z = " << polar(mag,ang) << "\n";

    return 0;

}


Beispiel poly
/* Beispiel poly */

#include <stdio.h>

#include <math.h>

 /* Polynom:  x**3 - 2x**2 + 5x - 1 */

int main(void)

{

  double array[] = { -1.0, 5.0, -2.0, 1.0

};

  double result;

  result = poly(2.0, 3, array);

  printf("The polynomial: x**3 - 2.0x**2 + 5x - 1 at 2.0 is %lf\n", result);

  return 0;

}


Beispiel pow
/* Beispiel pow */

#include <math.h>

#include <stdio.h>

int main(void)

{

  double x = 2.0, y = 3.0;

  printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));

  return 0;

}


Beispiel pow10
/* Beispiel pow10 */

#include <math.h>

#include <stdio.h>

int main(void)

{

  double p = 3.0;

  printf("Ten raised to %lf is %lf\n", p, pow10(p));

  return 0;

}


Beispiel putch
/* Beispiel putch */

#include <stdio.h>

#include <conio.h>

int main(void)

{

  char ch = 0;

  printf("Input a string:");

  while ((ch != '\r'))

  {

    ch = getch();

    putch(ch);

  }

  return 0;

}


Beispiel raise
/* Beispiel raise */

#include <signal.h>

int main(void)

{

    int a, b;

    a = 10;

    b = 0;

    if (b == 0)

     /* Kommt einem durch eine Division durch 0 entstehenden Fehler zuvor */

       raise(SIGFPE);

    a = a / b;

    return 0;

}


Beispiel rand
/* Beispiel rand */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

    int i;

    randomize();

    printf("Ten random numbers from 0 to 99\n\n");

    for(i=0; i<10; i++)

       printf("%d\n", rand() % 100);

    return 0;

}


Beispiel random
/* Beispiel random */

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

 /* Druckt eine Zufallszahl zwischen o und 99 aus */

int main(void)

 {

    randomize();

    printf("Random number in the 0-99 range: %d\n", random (100));

    return 0;

}


Beispiel randomize
/* Beispiel randomize */

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main(void)

{

    int i;

    randomize();

    printf("Ten random numbers from 0 to 99\n\n");

    for(i=0; i<10; i++)

        printf("%d\n", rand() % 100);

    return 0;

}


Beispiel real
/* Beispiel real */

#include <iostream.h>

#include <complex.h>

int main(void)

{

    double x = 3.1, y = 4.2;

    complex z = complex(x,y);

    cout << "z = " << z << "\n";

    cout << "  has real part = " << real(z) << "\n";

    cout << "  and imaginary real part = " << imag(z) << "\n";

    cout << "z has complex conjugate = " << conj(z) << "\n";

    return 0;

}


Beispiel remove
/* Beispiel remove */

#include <stdio.h>

int main(void)

{

    char file[80];

     /* Eingabeaufforderung zum Löschen eines Dateinamens */

    printf("File to delete: ");

    gets(file);

     /* Löschen der Datei */

    if (remove(file) == 0)

       printf("Removed %s.\n",file);

    else

       perror("remove");

    return 0;

}


Beispiel rename
/* Beispiel rename */

#include <stdio.h>

int main(void)

{

    char oldname[80], newname[80];

     /* Eingabeaufforderungen für den neuen und den alten Dateinamen beim Umbenennen von Dateien */

    printf("File to rename: ");

    gets(oldname);

    printf("New name: ");

    gets(newname);

     /* Umbenennen der Datei */

    if (rename(oldname, newname) == 0)

       printf("Renamed %s to %s.\n", oldname, newname);

    else

       perror("rename");

    return 0;

}


Beispiel rewind
/* Beispiel rewind */

#include <stdio.h>

#include <dir.h>

int main(void)

{

    FILE *fp;

    char *fname = "TXXXXXX", *newname, first;

    newname = mktemp(fname);

    fp = fopen(newname,"w+");

    fprintf(fp,"abcdefghijklmnopqrstuvwxyz");

    rewind(fp);

    fscanf(fp,"%c",&first);

    printf("The first character is: %c\n",first);

    fclose(fp);

    remove(newname);

    return 0;

}


Beispiel rewinddir
/* Beispiel rewinddir */

 /* opendir.c - test opendir(), readdir(), closedir() */

#include <dirent.h>

#include <stdio.h>

#include <stdlib.h>

void scandir(char *dirname)

{

   DIR *dir;

   struct dirent *ent;

   printf("First pass on '%s':\n",dirname);

   if ((dir = opendir(dirname)) == NULL)

   {

     perror("Unable to open directory");

     exit(1);

   }

   while ((ent = readdir(dir)) != NULL)

     printf("%s\n",ent->d_name);

   printf("Second pass on '%s':\n",dirname);

   rewinddir(dir);

   while ((ent = readdir(dir)) != NULL)

     printf("%s\n",ent->d_name);

   if (closedir(dir) != 0)

     perror("Unable to close directory");

 }

 void main(int argc,char *argv[])

 {

   if (argc != 2)

   {

     printf("usage: opendir dirname\n");

     exit(1);

   }

   scandir(argv[1]);

   exit(0);

}


Beispiel rmtmp
/* Beispiel rmtmp */

#include <stdio.h>

#include <process.h>

void main()

{

   FILE *stream;

   int i;

    /* Erzeugt temporäre Dateien */

   for (i = 1; i <= 10; i++)

   {

     if ((stream = tmpfile()) == NULL)

       perror("Could not open temporary file\n");

     else

       printf("Temporary file %d created\n", i);

   }

    /* Entfernt temporäre Dateien */

   if (stream != NULL)

     printf("%d temporary files deleted\n", rmtmp());

}


Beispiel _searchenv
/* Beispiel _searchenv */

#include <stdio.h>

#include <stdlib.h>

char buf[_MAX_PATH];

int main(void)

{

   /* Sieht nach TLINK */

  _searchenv("TLINK.EXE","PATH",buf);

  if (buf[0] == '\0')

    printf("TLINK.EXE not found\n");

  else

    printf("TLINK.EXE found in %s\n", buf);

   /* Sieht nach nicht existierenden Dateien */

  _searchenv("NOTEXIST.FIL","PATH",buf);

  if (buf[0] == '\0')

    printf("NOTEXIST.FIL not found\n");

  else

    printf("NOTEXIST.FIL found in %s\n", buf);

  return 0;

}

   /* Programmausgabe

      TLINK.EXE found in C:\BIN\TLINK.EXE

      NOTEXIST.FIL not found

  */


Beispiel searchpath
/* Beispiel searchpath */

#include <stdio.h>

#include <dir.h>

int main(void)

{

    char *p;

     /* Sieht nach TLINK und liefert einen

       Zeiger auf den Pfad zurück */

    p = searchpath("TLINK.EXE");

    printf("Search for TLINK.EXE : %s\n", p);

     /* Sieht nach nicht-existierenden Dateinamen */

    p = searchpath("NOTEXIST.FIL");

    printf("Search for NOTEXIST.FIL : %s\n", p);

    return 0;

}


Beispiel abort
/* Beispiel abort */

#include <stdio.h>

#include <stdlib.h>

 int main(void)

 {

   printf("Calling abort()\n");

   abort();

   return 0;  /* Diese Zeile wird niemals erreicht */

 }


Beispiel access
/* Beispiel access */

 #include <stdio.h>

 #include <io.h>

 int file_exists(char *filename);

 int main(void)

 {

printf("Does NOTEXIST.FIL exist: %s\n",

 file_exists("NOTEXISTS.FIL") ? "YES" : "NO");

return 0;

 }

 int file_exists(char *filename)

 {

   return (access(filename, 0) == 0);

 }


Beispiel arg
/* Beispiel arg */

 #include <iostream.h>

 #include <complex.h>

 int main(void)

 {

    double x = 3.1, y = 4.2;

    complex z = complex(x,y);

    cout << "z = " << z << "\n";

    cout << "  has real part = " << real(z) << "\n";

    cout << "  and imaginary part = " << imag(z) << "\n";

    cout << "z has complex conjugate = " << conj(z) << "\n";

    double mag = sqrt(norm(z));

    double ang = arg(z);

    cout << "The polar form of z is:\n";

    cout << "   magnitude = " << mag << "\n";

    cout << "   angle (in radians) = " << ang << "\n";

    cout << "Reconstructing z from its polar form gives:\n";

    cout << "   z = " << polar(mag,ang) << "\n";

    return 0;

 }


Beispiel assert
/* Beispiel assert */

 #include <assert.h>

 #include <stdio.h>

 #include <stdlib.h>

 struct ITEM {

    int key;

    int value;

 };

  /* Addiert einen Eintrag zu der Liste und stellt sicher, daß die Liste nicht Null ist */

 void additem(struct ITEM *itemptr) {

    assert(itemptr != NULL);

     /* Addiert einen Eintrag zu der Liste */

 }

 int main(void)

 {

    additem(NULL);

    return 0;

 }


Beispiel atexit
/* Beispiel atexit */

 #include <stdio.h>

 #include <stdlib.h>

 void exit_fn1(void)

 {

    printf("Exit function #1 called\n");

 }

 void exit_fn2(void)

 {

    printf("Exit function #2 called\n");

 }

 int main(void)

 {

     /* Eintragen der Funktion exit #1 */

    atexit(exit_fn1);

     /* Eintragen der Funktion exit #2 */

    atexit(exit_fn2);

    return 0;

 }


Beispiel atof
/* Beispiel atof */

 #include <stdlib.h>

 #include <stdio.h>

 int main(void)

 {

    float f;

    char *str = "12345.67";

    f = atof(str);

    printf("string = %s float = %f\n", str, f);

    return 0;

 }


Beispiel atoi
/* Beispiel atoi */

 #include <stdlib.h>

 #include <stdio.h>

 int main(void)

 {

    int n;

    char *str = "12345.67";

    n = atoi(str);

    printf("string = %s integer = %d\n", str, n);

    return 0;

 }


Beispiel atol
/* Beispiel atol */

 #include <stdlib.h>

 #include <stdio.h>

 int main(void)

 {

    long l;

    char *lstr = "98765432";

    l = atol(lstr);

    printf("string = %s integer = %ld\n", lstr, l);

    return(0);

 }


Beispiel bcd
/* Beispiel bcd */

 #include <iostream.h>

 #include <bcd.h>

 double x = 10000.0;         // Zehntausend Deutsche Mark

 bcd a = bcd(x/3,2);         // ein Drittel, zum nächsten Pfennig gerundet

 int main(void)

 {

    cout << "share of fortune = $" << a << "\n";

    return 0;

 }


Beispiel bdos
/* Beispiel bdos */

 #include <stdio.h>

 #include <dos.h>

  /* Erhält das aktuelle Laufwerk als 'A', 'B', ... */

 char current_drive(void)

 {

    char curdrive;

     /* Erhält das aktuelle Laufwerk als 0, 1, ... */

    curdrive = bdos(0x19, 0, 0);

    return('A' + curdrive);

 }

 int main(void)

 {

    printf("The current drive is %c:\n", current_drive());

    return 0;

 }


Beispiel bdosptr
/* Beispiel bdosptr */

 #include <string.h>

 #include <stdio.h>

 #include <dir.h>

 #include <dos.h>

 #include <errno.h>

 #include <stdlib.h>

 #define  BUFLEN  80

 int main(void)

 {

    char  buffer[BUFLEN];

    int   test;

    printf("Enter full pathname of a directory\n");

    gets(buffer);

    test = bdosptr(0x3B,buffer,0);

       if(test)

       {

          printf("DOS error message: %d\n", errno);

           /* Siehe errno.h für eine Liste der Fehler */

          exit (1);

       }

    getcwd(buffer, BUFLEN);

    printf("The current directory is: %s\n", buffer);

    return 0;

 }


Beispiel calloc
/* Beispiel calloc */

 #include <stdio.h>

 #include <alloc.h>

 #include <string.h>

 int main(void)

 {

    char *str = NULL;

     /* Speicherplatz für einen String reservieren */

    str = (char *) calloc(10, sizeof(char));

     /* Kopiert "Hallo" in den String */

    strcpy(str, "Hello");

     /* Zeigt den String an */

    printf("String is %s\n", str);

     /* Gibt Speicherplatz frei */

    free(str);

    return 0;

 }


Beispiel ceil und floor
/* Beispiel ceil und floor */

 #include <math.h>

 #include <stdio.h>

 int main(void)

 {

    double number = 123.54;

    double down, up;

    down = floor(number);

    up = ceil(number);

    printf("original number     %5.2lf\n", number);

    printf("number rounded down %5.2lf\n", down);

    printf("number rounded up   %5.2lf\n", up);

    return 0;

 }


Beispiel cgets
/* Beispiel cgets */

 #include <stdio.h>

 #include <conio.h>

 int main(void)

 {

    char buffer[83];

    char *p;

     /* Es ist Platz für 80 Zeichen und das abschießende Nullzeichen vorhanden */

    buffer[0] = 81;

    printf("Input some chars:");

    p = cgets(buffer);

    printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p);

    printf("The returned pointer is %p, buffer[0] is at %p\n", p, &buffer);

     /* Läßt Platz für 5 80 Zeichen und das abschießende Nullzeichen */

    buffer[0] = 6;

    printf("Input some chars:");

    p = cgets(buffer);

    printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p);

    printf("The returned pointer is %p, buffer[0] is at %p\n", p, &buffer);

    return 0;

 }


Beispiel _chain_intr
/* Beispiel _chain_intr */

#include <dos.h>

#include <stdio.h>

#include <process.h>

#ifdef __cplusplus

    #define __CPPARGS ...

#else

    #define __CPPARGS

#endif

typedef void interrupt (*fptr)(__CPPARGS);

static void mesg(char *s)

{

  while (*s)

    bdos(2,*s++,0);

}

#pragma argsused

void interrupt handler2(unsigned bp, unsigned di)

{

  _enable();

  mesg("In handler 2.\r\n");

  if (di == 1)

    mesg("DI is 1\r\n");

  else

    mesg("DI is not 1\r\n");

  di++;

}

#pragma argsused

void interrupt handler1(unsigned bp, unsigned di)

{

  _enable();

  mesg("In handler 1.\r\n");

  if (di == 0)

    mesg("DI is 0\r\n");

  else

    mesg("DI is not 0\r\n");

  di++;

  mesg("Chaining to handler 2.\r\n");

  _chain_intr((fptr) handler2);

}

int main()

{

  _dos_setvect(128,(fptr) handler1);

  printf("About to generate interrupt 128\n");

  _DI = 0;

  geninterrupt(128);

  printf("DI was 0 before interrupt, is now 0x%x\n",_DI);

  return 0;

}


Beispiel chdir
/* Beispiel chdir */

#include <stdio.h>

#include <stdlib.h>

#include <dir.h>

char old_dir[MAXDIR];

char new_dir[MAXDIR];

int main(void)

{

   if (getcurdir(0, old_dir))

   {

      perror("getcurdir()");

      exit(1);

   }

   printf("Current directory is: \\%s\n", old_dir);

   if (chdir("\\"))

   {

      perror("chdir()");

      exit(1);

   }

   if (getcurdir(0, new_dir))

   {

      perror("getcurdir()");

      exit(1);

   }

   printf("Current directory is now: \\%s\n", new_dir);

   printf("\nChanging back to original directory: \\%s\n", old_dir);

   if (chdir(old_dir))

   {

      perror("chdir()");

      exit(1);

   }

   return 0;

}


Beispiel chmod
/* Beispiel chmod */

 /* NEW chmod() example: */

#include <errno.h>

#include <stdio.h>

#include <io.h>

#include <process.h>

#include <sys\stat.h>

void main(void)

{

  char filename[64];

  struct stat stbuf;

  int amode;

  printf("Enter name of file: ");

  scanf("%s", filename);

  if (stat(filename, &stbuf) != 0)

  {

    perror("Unable to get file information");

    exit(1);

  }

  if (stbuf.st_mode & S_IWRITE)

  {

    printf("Changing to read-only\n");

    amode = S_IREAD;

  }

  else

  {

    printf("Changing to read-write\n");

    amode = S_IREAD|S_IWRITE;

  }

  if (chmod(filename, amode) != 0)

  {

    perror("Unable to change file mode");

    exit(1);

  }

  exit(0);

}


Beispiel chsize
/* Beispiel chsize */

#include <string.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char buf[11] = "0123456789";

    /* Erzeugt eine Textdatei, die 10 Bytes enthält */

   handle = open("DUMMY.FIL", O_CREAT);

   write(handle, buf, strlen(buf));

    /* Schneidet eine Datei auf eine Größe von 5 Bytes ab */

   chsize(handle, 5);

    /* Schließt die Datei */

   close(handle);

   return 0;

}


Beispiel _clear87 und _status87
/* Beispiel _clear87 und _status87 */

#include <stdio.h>

#include <float.h>

int main(void)

{

   float x;

   double y = 1.5e-100;

   printf("\nStatus 87 before error: %X\n", _status87());

   x = y;  /* Erzeugt einen $$$Unterlauf und einen Genauigkeitsverlust */

   printf("Status 87 after  error: %X\n", _status87());

   _clear87();

   printf("Status 87 after  clear: %X\n", _status87());

   y = x;

   return 0;

}


Beispiel clearerr
/* Beispiel clearerr */

#include <stdio.h>

int main(void)

{

   FILE *fp;

   char ch;

    /* Öffnen einer Datei zum Schreiben */

   fp = fopen("DUMMY.FIL", "w");

    /* Erzwingt durch einen Schreibversuch eine Fehlerbedingung */

   ch = fgetc(fp);

   printf("%c\n",ch);

   if (ferror(fp))

   {

       /* Zeigt eine Fehlermeldung an */

      printf("Error reading from DUMMY.FIL\n");

       /* Setzt den Fehler und die Indikatoren für das Dateiende zurück */

      clearerr(fp);

   }

   fclose(fp);

   return 0;

}


Beispiel clock
/* Beispiel clock */

#include <time.h>

#include <stdio.h>

#include <dos.h>

int main(void)

{

   clock_t start, end;

   start = clock();

   delay(2000);

   end = clock();

   printf("The time was: %f\n", (end - start) / CLK_TCK);

   return 0;

}


Beispiel clreol
/* Beispiel clreol */

#include <conio.h>

int main(void)

{

   clrscr();

   cprintf("The function CLREOL clears all characters from the\r\n");

   cprintf("cursor position to the end of the line within the\r\n");

   cprintf("current text window, without moving the cursor.\r\n");

   cprintf("Press any key to continue . . .");

   gotoxy(14, 4);

   getch();

   clreol();

   getch();

   return 0;

}


Beispiel clrscr
/* Beispiel clrscr */

#include <conio.h>

int main(void)

{

   int i;

   clrscr();

   for (i = 0; i < 20; i++)

      cprintf("%d\r\n", i);

   cprintf("\r\nPress any key to clear screen");

   getch();

   clrscr();

   cprintf("The screen has been cleared!");

   getch();

   return 0;

}


Beispiel complex
/* Beispiel complex */

#include <iostream.h>

#include <complex.h>

int main(void)

{

   double x = 3.1, y = 4.2;

   complex z = complex(x,y);

   cout << "z = "<< z << "\n";

   cout << " and imaginary real part = " << imag(z) << "\n";

   cout << "z has complex conjugate =  " << conj(z) << " \n";

   return 0;

}


Beispiel conj
/* Beispiel conj */

#include <iostream.h>

#include <complex.h>

int main(void)

{

   double x = 3.1, y = 4.2;

   complex z = complex(x,y);

   cout << "z = "<< z << "\n";

   cout << " and imaginary real part = " << imag(z) << "\n";

   cout << "z has complex conjugate =  " << conj(z) << " \n";

   return 0;

}


Beispiel country
/* Beispiel country */

#include <dos.h>

#include <stdio.h>

#define USA 0

int main(void)

{

   struct COUNTRY country_info;

   country(USA, &country_info);

   printf("The currency symbol for the USA is: %s\n",

           country_info.co_curr);

   return 0;

}


Beispiel cputs
/* Beispiel cputs */

#include <conio.h>

int main(void)

{

    /* Löscht den Bildschirm */

   clrscr();

    /* Erzeugt ein Textfenster */

   window(10, 10, 80, 25);

    /* Gibt Text in ein Fenster aus */

   cputs("This is within the window\r\n");

    /* Wartet auf einen Schlüssel */

   getch();

   return 0;

}


Beispiel creattemp
/* Beispiel creattemp */

#include <string.h>

#include <stdio.h>

#include <io.h>

int main(void)

{

   int handle;

   char pathname[128];

   strcpy(pathname, "\\");

    /* Erzeugt eine eindeutige Datei im Stammverzeichnis */

   handle = creattemp(pathname, 0);

   printf("%s was the unique file created.\n", pathname);

   close(handle);

   return 0;

}


Beispiel ctrlbrk
/* Beispiel ctrlbrk */

#include <stdio.h>

#include <dos.h>

#define ABORT 0

int c_break(void)

{

   printf("Control-Break pressed.  Program aborting ...\n");

return (ABORT);

}

void main(void)

{

   ctrlbrk(c_break);

   for(;;)

   {

      printf("Looping... Press <Ctrl-Break> to quit:\n");

   }

}


Beispiel delline
/* Beispiel delline */

#include <conio.h>

int main(void)

{

   clrscr();

   cprintf("The function DELLINE deletes the line containing the\r\n");

   cprintf("cursor and moves all lines below it one line up.\r\n");

   cprintf("DELLINE operates within the currently active text\r\n");

   cprintf("window.  Press any key to continue . . .");

   gotoxy(1,2);   /* Move the cursor to the second line and first column */

   getch();

   delline();

   getch();

   return 0;

}


Beispiel difftime
/* Beispiel difftime */

#include <time.h>

#include <stdio.h>

#include <dos.h>

#include <conio.h>

int main(void)

{

   time_t first, second;

   clrscr();

   first = time(NULL);   /* Erhält die

                           Systemzeit */

   delay(2000);          /* Wartet 2 Sekunden */

   second = time(NULL);  /* Erhält noch einmal die

                           Systemzeit */

   printf("The difference is: %f seconds\n",difftime(second,first));

   getch();

   return 0;

}


Beispiel dosexterr
/* Beispiel dosexterr */

#include <stdio.h>

#include <dos.h>

int main(void)

{

   FILE *fp;

   struct DOSERROR info;

   fp = fopen("perror.dat","r");

   if (!fp) perror("Unable to open file for reading");

   dosexterr(&info);

   printf("Extended DOS error information:\n");

   printf("   Extended error: %d\n",info.de_exterror);

   printf("            Class: %x\n",info.de_class);

   printf("           Action: %x\n",info.de_action);

   printf("      Error Locus: %x\n",info.de_locus);

   return 0;

}


Beispiel dostounix
/* Beispiel dostounix */

#include <time.h>

#include <stddef.h>

#include <dos.h>

#include <stdio.h>

int main(void)

{

  time_t t;

  struct time d_time;

  struct date d_date;

  struct tm *local;

  getdate(&d_date);

  gettime(&d_time);

  t = dostounix(&d_date, &d_time);

  local = localtime(&t);

  printf("Time and Date: %s\n", asctime(local));

  return 0;

}


Beispiel __emit__
/* Beispiel __emit__ */

#include <dos.h>

int main(void)

{

 /* Erzeugt Quelltext, der über int 5 einen Bildschirmausdruck erzeugt */

   __emit__(0xcd,0x05);

   return 0;

}


Beispiel eof
/* Beispiel eof */

#include <sys\stat.h>

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char msg[] = "This is a test";

   char ch;

    /* Erzeugen einer Datei */

   handle = open("DUMMY.FIL",

                 O_CREAT | O_RDWR,

                 S_IREAD | S_IWRITE);

    /* Schreiben von Daten in die Datei */

   write(handle, msg, strlen(msg));

    /* Dateizeiger an den Dateianfang setzen */

   lseek(handle, 0L, SEEK_SET);

    /* Liest Zeichen aus der Datei, bis mit EOF das Dateiende erreicht ist */

   do

   {

      read(handle, &ch, 1);

      printf("%c", ch);

   } while (!eof(handle));

   close(handle);

   return 0;

}


Beispiel exp und expl
/* Beispiel exp und expl */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double result;

   double x = 4.0;

   result = exp(x);

   printf("'e' raised to the power \

          of %lf (e ^ %lf) = %lf\n",

          x, x, result);

   return 0;

}


Beispiel farcalloc
/* Beispiel farcalloc */

#include <stdio.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

int main(void)

{

   char far *fptr;

   char *str = "Hello";

    /* Resierviert Speicherplatz für den FAR-Zeiger */

   fptr = (char far *) farcalloc(10, sizeof(char));

    /* Kopiert "Hello" in den reservierten Speicher */

    /*

      HINWEIS: movedata wird verwendet, weil Sie sich im Datenmodell small befinden könnten.

      In diesem Fall kann eine normale Routine zum Kopieren von Strings nicht verwendet werden,

      seitdem sie sicherstellt, daß die Zeigergröße near ist

   */

   movedata(FP_SEG(str), FP_OFF(str),

      FP_SEG(fptr), FP_OFF(fptr),

      strlen(str));

    /* Zeigt den String an (Beachten Sie den Modifizierer F) */

   printf("Far string is: %Fs\n", fptr);

    /* Gibt Speicherplatz frei */

   farfree(fptr);

   return 0;

}


Beispiel farmalloc
/* Beispiel farmalloc */

#include <stdio.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

int main(void)

{

   char far *fptr;

   char *str = "Hello";

    /* Reserviert Speicherplatz für die Zeiger vom Typ far */

   fptr = (char far *) farmalloc(10);

    /* Kopiert "Hello" in den reservierten Speicher */

    /*

     HINWEIS: movedata wird verwendet, weil Sie sich im Datenmodell small befinden könnten.

     In diesem Fall kann eine normale Routine zum Kopieren von Strings nicht verwendet werden,

     seitdem sie sicherstellt, daß die Zeigergröße near ist

   */

   movedata(FP_SEG(str), FP_OFF(str),

            FP_SEG(fptr), FP_OFF(fptr),

            strlen(str) + 1);

    /* Zeigt den String an (note the F modifier)

*/

   printf("Far string is: %Fs\n", fptr);

    /* Gibt Speicherplatz frei */

   farfree(fptr);

   return 0;

}


Beispiel fclose
/* Beispiel fclose */

#include <string.h>

#include <stdio.h>

int main(void)

{

   FILE *fp;

   char buf[11] = "0123456789";

    /* Erzeugen einer Datei, die 10 Bytes enthält */

   fp = fopen("DUMMY.FIL", "w");

   fwrite(&buf, strlen(buf), 1, fp);

    /* Schließen der Datei */

   fclose(fp);

   return 0;

}


Beispiel fcloseall
/* Beispiel fcloseall */

#include <stdio.h>

int main(void)

{

   int streams_closed;

    /* Öffnet zwei Streams */

   fopen("DUMMY.ONE", "w");

   fopen("DUMMY.TWO", "w");

    /* Schließt die offenen Streams */

   streams_closed = fcloseall();

   if (streams_closed == EOF)

       /* Ausgabe einer Fehlermeldung */

      perror("Error");

   else

       /* Druckt das Ergebnis der Funktion fcloseall() */

      printf("%d streams were closed.\n", streams_closed);

   return 0;

}


Beispiel feof
/* Beispiel feof */

#include <stdio.h>

int main(void)

{

   FILE *stream;

    /* Öffnen einer Datei for reading */

   stream = fopen("DUMMY.FIL", "r");

    /* Liest ein Zeichen aus einer Datei */

   fgetc(stream);

    /* Prüft auf Dateiende (EOF) */

   if (feof(stream))

      printf("We have reached end-of-file\n");

    /* Schließt die Datei */

   fclose(stream);

   return 0;

}


Beispiel ferror
/* Beispiel ferror */

#include <stdio.h>

int main(void)

{

   FILE *stream;

    /* Öffnen einer Datei zum Schreiben */

   stream = fopen("DUMMY.FIL", "w");

    /* Erzeugt  durch einen Leseversuch eine Fehlerbedingung */

   (void) getc(stream);

   if (ferror(stream))   /* test for an error on the stream */

   {

       /* Zeigt eine Fehlermeldung an */

      printf("Error reading from DUMMY.FIL\n");

       /* Setzt den Fehler und die Indikatoren für das Dateiende (EOF) zurück */

      clearerr(stream);

   }

   fclose(stream);

   return 0;

}


Beispiel fflush
/* Beispiel fflush */

#include <string.h>

#include <stdio.h>

#include <conio.h>

#include <io.h>

void flush(FILE *stream);

int main(void)

{

   FILE *stream;

   char msg[] = "This is a test";

    /* Erzeugen einer Datei */

   stream = fopen("DUMMY.FIL", "w");

    /* Schreiben von Daten in die Datei */

   fwrite(msg, strlen(msg), 1, stream);

   clrscr();

   printf("Press any key to flush DUMMY.FIL:");

   getch();

    /* Leeren der Daten in DUMMY.FIL, ohne es zu schließen */

   flush(stream);

   printf("\nFile was flushed, Press any key to quit:");

   getch();

   return 0;

}

void flush(FILE *stream)

{

     int duphandle;

      /* Entleeren des internen Puffers des Streams */

     fflush(stream);

      /* Erstellen einer Kopie des Datei-Handles */

     duphandle = dup(fileno(stream));

      /* Schließen der Kopie des Handles, um den DOS-Puffer zu leeren */

     close(duphandle);

}


Beispiel fgetpos und fsetpos
/* Beispiel fgetpos und fsetpos */

#include <stdlib.h>

#include <stdio.h>

void showpos(FILE *stream);

int main(void)

{

   FILE *stream;

   fpos_t filepos;

    /* Öffnet eine Datei zum Aktualisieren */

   stream = fopen("DUMMY.FIL", "w+");

    /* Speichert die Position des Dateizeigers */

   fgetpos(stream, &filepos);

    /* Schreibt Daten in die Datei */

   fprintf(stream, "This is a test");

    /* Zeigt die aktuelle Position der Datei an */

   showpos(stream);

    /* Setzt eine neue Dateiposition und zeigt sie an */

   if (fsetpos(stream, &filepos) == 0)

     showpos(stream);

   else

   {

      fprintf(stderr, "Error setting file pointer.\n");

      exit(1);

   }

    /* Schließt die Datei */

   fclose(stream);

   return 0;

}

void showpos(FILE *stream)

{

   fpos_t pos;

    /* Zeigt die aktuelle Position

      des Dateizeigers eines Streams */

   fgetpos(stream, &pos);

   printf("File position: %ld\n", pos);

}


Beispiel filelength
/* Beispiel filelength */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char buf[11] = "0123456789";

    /* Erzeuget einer Datei, die 10 Bytes enthält */

   handle = open("DUMMY.FIL", O_CREAT);

   write(handle, buf, strlen(buf));

    /* Zeigt die aktuelle Größe der Datei an */

   printf("file length in bytes: %ld\n", filelength(handle));

    /* Schließt die Datei */

   close(handle);

   return 0;

}


Beispiel fileno
/* Beispiel fileno */

#include <stdio.h>

int main(void)

{

   FILE *stream;

   int handle;

    /* Erzeugt einer Datei */

   stream = fopen("DUMMY.FIL", "w");

    /* Erhält das mit dem Stream verbundene Dateihandle */

   handle = fileno(stream);

    /* Zeigt die Nummer des Handles an */

   printf("handle number: %d\n", handle);

    /* Schließt die Datei */

   fclose(stream);

   return 0;

}


Beispiel flushall
/* Beispiel flushall */

#include <stdio.h>

int main(void)

{

   FILE *stream;

    /* Erzeugt eine Datei */

   stream = fopen("DUMMY.FIL", "w");

    /* Entleert alle offenen Streams */

   printf("%d streams were flushed.\n", flushall());

    /* Schließt die Datei */

   fclose(stream);

   return 0;

}


Beispiel fmod und fmodl
/* Beispiel fmod und fmodl */

#include <stdio.h>

#include <math.h>

int main(void)

{

   double x = 5.0, y = 2.0;

   double result;

   result = fmod(x,y);

   printf("The remainder of (%lf / %lf) is %lf\n", x, y, result);

   return 0;

}


Beispiel FP_OFF, FP_SEG und MK_FP
/* Beispiel FP_OFF und FP_SEG */

#include <stdio.h>

#include <dos.h>

main()

{

  char *str = "Hello\n";

  printf("The address pointed to by str is %04X:%04X\n",

          FP_SEG(str), FP_OFF(str));

  printf("The address of str is %04X:%04X\n", FP_SEG(&str), FP_OFF(&str));

  return 0;

}


Beispiel fread
/* Beispiel fread */

#include <string.h>

#include <stdio.h>

int main(void)

{

   FILE *stream;

   char msg[] = "this is a test";

   char buf[20];

   if ((stream = fopen("DUMMY.FIL", "w+"))

       == NULL)

   {

      fprintf(stderr, "Cannot open output file.\n");

      return 1;

   }

    /* Schreiben von Daten in die Datei */

   fwrite(msg, strlen(msg)+1, 1, stream);

    /* Setzt den Dateizeiger auf den Anfang der Datei */

   fseek(stream, SEEK_SET, 0);

    /* Liest die Daten und zeigt sie an */

   fread(buf, strlen(msg)+1, 1, stream);

   printf("%s\n", buf);

   fclose(stream);

   return 0;

}


Beispiel frexp und frexpl
/* Beispiele frexp und frexpl */

#include <math.h>

#include <stdio.h>

int main(void)

{

   double mantissa, number;

   int exponent;

   number = 8.0;

   mantissa = frexp(number, &exponent);

   printf("The number %lf is ", number);

   printf("%lf times two to the ", mantissa);

   printf("power of %d\n", exponent);

   return 0;

}


Beispiel fseek
/* Beispiel fseek */

#include <stdio.h>

long filesize(FILE *stream);

int main(void)

{

   FILE *stream;

   stream = fopen("MYFILE.TXT", "w+");

   fprintf(stream, "This is a test");

   printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));

   fclose(stream);

   return 0;

}

long filesize(FILE *stream)

{

   long curpos, length;

   curpos = ftell(stream);

   fseek(stream, 0L, SEEK_END);

   length = ftell(stream);

   fseek(stream, curpos, SEEK_SET);

   return length;

}


Beispiel ftell
/* Beispiel ftell */

#include <stdio.h>

int main(void)

{

   FILE *stream;

   stream = fopen("MYFILE.TXT", "w+");

   fprintf(stream, "This is a test");

   printf("The file pointer is at byte %ld\n", ftell(stream));

   fclose(stream);

   return 0;

}


Beispiel ftime
/* Beispiel ftime */

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <sys\timeb.h>

 /* Speichern der Tageszeiten des pazifischen Standards */

char *tzstr = "TZ=PST8PDT";

int main(void)

{

   struct timeb t;

   putenv(tzstr);

   tzset();

   ftime(&t);

   printf("Seconds since 1/1/1970 GMT: %ld\n", t.time);

   printf("Thousandths of a second: %d\n", t.millitm);

   printf("Difference between local time and GMT: %d\n", t._timezone);

   printf("Daylight savings in effect (1) not (0): %d\n", t.dstflag);

   return 0;

}


Beispiel _fullpath
/* Beispiel _fullpath */

#include <stdio.h>

#include <stdlib.h>

char buf[_MAX_PATH];

void main(int argc, char *argv[])

{

  for ( ; argc; argv++, argc--)

  {

    if (_fullpath(buf, argv[0], _MAX_PATH) == NULL)

      printf("Unable to obtain full path of %s\n",argv[0]);

    else

      printf("Full path of %s is %s\n",argv[0],buf);

  }

}


Beispiel fwrite
/* Beispiel fwrite */

#include <stdio.h>

struct mystruct

{

  int i;

  char ch;

};

int main(void)

{

   FILE *stream;

   struct mystruct s;

   if ((stream = fopen("TEST.$$$", "wb")) == NULL)  /* Öffnet Datei TEST.$$$ */

   {

      fprintf(stderr, "Cannot open output file.\n");

      return 1;

   }

   s.i = 0;

   s.ch = 'A';

   fwrite(&s, sizeof(s), 1, stream);  /* write struct s to file */

   fclose(stream);  /* close file */

   return 0;

}


Beispiel gcvt
/* Beispiel gcvt */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   char str[25];

   double num;

   int sig = 5;  /* Signifikante Zeichen */

    /* Eine normale Zahl */

   num = 9.876;

   gcvt(num, sig, str);

   printf("string = %s\n", str);

    /* Eine negative Zahl */

   num = -123.4567;

   gcvt(num, sig, str);

   printf("string = %s\n", str);

    /* exponentielle Schreibweise */

   num = 0.678e5;

   gcvt(num, sig, str);

   printf("string = %s\n", str);

   return(0);

}


Beispiel geninterrupt
/* Beispiel geninterrupt */

#include <conio.h>

#include <dos.h>

 /* Funktionsprototyp */

void writechar(char ch);

int main(void)

{

   clrscr();

   gotoxy(80,25);

   writechar('*');

   getch();

   return 0;

}

 /*

   Gibt ein Zeichen bei der gegenwärtigen Position des Cursors

   aus. Verwendet dabei das Video-Bios, um das Blättern auf dem

   Bildschirm während des Schreibens an die Position (80,25)

   zu vermeiden.

*/

void writechar(char ch)

{

   struct text_info ti;

    /* Nehmen der aktuellen Texteinstellungen */

   gettextinfo(&ti);

    /* Interrupt 0x10, Unter-Function 9 */

   _AH = 9;

    /* Zeichen für die Ausgabe */

   _AL = ch;

   _BH = 0;                   /* Video-Seite */

   _BL = ti.attribute;   /* Video-Attribut */

   _CX = 1;            /* Wiederholungsfaktor */

   geninterrupt(0x10);   /* Ausgabe des Zeichens */

}


Beispiel getcbrk und setcbrk
/* Beispiel getcbrk und setcbrk */

#include <dos.h>

#include <conio.h>

#include <stdio.h>

int main(void)

{

   int break_flag;

   printf("Enter 0 to turn control break off\n");

   printf("Enter 1 to turn control break on\n");

   break_flag = getch() - 0;

   setcbrk(break_flag);

   if (getcbrk())

      printf("Cntrl-brk flag is on\n");

   else

      printf("Cntrl-brk flag is off\n");

   return 0;

}


Beispiel segread
/* Beispiel segread */

#include <stdio.h>

#include <dos.h>

int main(void)

{

   struct SREGS segs;

   segread(&segs);

   printf("Current segment register settings\n\n");

   printf("CS: %X   DS: %X\n", segs.cs, segs.ds);

   printf("ES: %X   SS: %X\n", segs.es, segs.ss);

   return 0;

}


Beispiel setmem
/* Beispiel setmem */

#include <stdio.h>

#include <alloc.h>

#include <mem.h>

int main(void)

{

   char *dest;

   dest = (char *) calloc(21, sizeof(char));

   setmem(dest, 20, 'c');

   printf("%s\n", dest);

   return 0;

}


Beispiel setmode
/* Beispiel setmode */

#include <fcntl.h>

#include <io.h>

#include <stdio.h>

int main (int argc, char ** argv )

(

  FILE *fp;

  int newmode;

  long where;

  char buf[256];

  fp = fopen( argv[1], "r+" );

  if ( !fp )

  {

    printf( "Couldn't open %s\n", argv[1] );

    return -1;

  }

  newmode = setmode( fileno( fp ), O_BINARY );

  if ( newmode == -1 )

  {

    printf( "Coudn't set mode of %s\n", argv[1] );

    return -2

  }

  fp->flags |= _F_BIN;

  where = ftell( fp );

  printf ("file position: %d\n", where );

  fread( buf, 1, 1, fp );

  where = ftell ( fp );

  printf( "read %c, file position: %ld\n", *buf, where );

  fclose ( fp );

  return 0;

}


Beispiel signal
/* Beispiel signal */

 /* Beispiel signal */

 /*

    Dieses Beispiel installiert eine Routine eines Signal-Handlers für

    SIGFPE, fängt einen Überlaufzustand für integer auf und kehrt zurück.

    Dieses Beispielprogramm KÖNNTE zum Absturz Ihres Computers führen und

    wird - abhängig vom verwendeten Speichermodell - Laufzeitfehler

    produzieren.

*/

#pragma inline

#include <stdio.h>

#include <signal.h>

#ifdef __cplusplus

   typedef void (*fptr)(int);

#else

   typedef void (*fptr)();

#endif

void Catcher(int *reglist)

{

   signal(SIGFPE, (fptr)Catcher);  //  ******Reinstalliert die Signalbehandlung

   printf("Caught it!\n"); *(reglist + 8) = 3;  /* Führt zur Rückgabe von AX = 3 */

}

int main(void)

{

   signal(SIGFPE, (fptr)Catcher);   /* Wandelt Catcher in einen passenden Typ um */

   asm     mov     ax,07FFFH        /* AX = 32767 */

   asm     inc     ax               /* Verursacht Überlauf */

   asm     into                     /* Aktiviert Handler */

    /* Der Handler setzt AX bei der Rückgabe auf 3. Wenn das nicht passieren

      würde, dann würde eine andere Ausnahme auftreten, wenn das nächste

      'into' nach der Anweisung 'dec' ausgeführt werden würde. */

   asm     dec     ax               /* Jetzt keinen Überlauf */

   asm     into                     /* Keine Aktivierung */

   return 0;

}


Beispiel sleep
/* Beispiel sleep */

#include <dos.h>

#include <stdio.h>

int main(void)

{

   int i;

   for (i=1; i<5; i++)

   {

      printf("Sleeping for %d seconds\n", i);

      sleep(i);

   }

   return 0;

}


Beispiel sqrt
/* Beispiel sqrt */

#include <math.h>

#include <stdio.h>

int main(void)

{

   double x = 4.0, result;

   result = sqrt(x);

   printf("The square root of %lf is %lf\n", x, result);

   return 0;

}


Beispiel srand
/* Beispiel srand */

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main(void)

{

   int i;

   time_t t;

   srand((unsigned) time(&t));

   printf("Ten random numbers from 0 to 99\n\n");

   for(i=0; i<10; i++)

       printf("%d\n", rand() % 100);

   return 0;

}


Beispiel stpcpy
/* Beispiel stpcpy */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char string[10];

   char *str1 = "abcdefghi";

   stpcpy(string, str1);

   printf("%s\n", string);

   return 0;

}


Beispiel strcat
/*Beispiel strcat */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char destination[25];

   char *blank = " ", *c = "C++", *Borland = "Borland";

   strcpy(destination, Borland);

   strcat(destination, blank);

   strcat(destination, c);

   printf("%s\n", destination);

   return 0;

}


Beispiel strchr
/* Beispiel strchr */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char string[15];

   char *ptr, c = 'r';

   strcpy(string, "This is a string");

   ptr = strchr(string, c);

   if (ptr)

      printf("The character %c is at position: %d\n", c, ptr-string);

   else

      printf("The character was not found\n");

   return 0;

}


Beispiel strcoll
/* Beispiel strcoll */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *two = "International";

   char *one = "Borland";

   int check;

   check = strcoll(one, two);

   if (check == 0)

      printf("The strings are equal\n");

   if (check <  0)

      printf("%s comes before %s\n", one, two);

   if (check >  0)

      printf("%s comes before %s\n", two, one);

   return 0;

}


Beispiel strcpy
/* Beispiel strcpy */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char string[10];

   char *str1 = "abcdefghi";

   strcpy(string, str1);

   printf("%s\n", string);

   return 0;

}


Beispiel _strdate
/* Beispiel _strdate */

#include <time.h>

#include <stdio.h>

void main(void)

{

  char datebuf[9];

  char timebuf[9];

  _strdate(datebuf);

  _strtime(timebuf);

  printf("Date: %s  Time: %s\n",datebuf,timebuf);

}


Beispiel strdup
/* Beispiel strdup */

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

   char *dup_str, *string = "abcde";

   dup_str = strdup(string);

   printf("%s\n", dup_str);

   free(dup_str);

   return 0;

}


Beispiel strftime
/* Beispiel strftime */

#include <stdio.h>

#include <time.h>

#include <dos.h>

int main(void)

{

   struct tm *time_now;

   time_t secs_now;

   char str[80];

   tzset();

   time(&secs_now);

   time_now = localtime(&secs_now);

   strftime(str, 80,

            "It is %M minutes after %I o'clock (%Z)  %A, %B %d 19%y",

            time_now);

   printf("%s\n",str);

   return 0;

}


Beispiel strlen
/*Beispiel strlen */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *string = "Borland International";

   printf("%d\n", strlen(string));

   return 0;

}


Beispiel strncat
/*Beispiel strncat */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char destination[25];

   char *source = " States";

   strcpy(destination, "United");

   strncat(destination, source, 7);

   printf("%s\n", destination);

   return 0;

}


Beispiel  strncpy
/* Beispiel strncpy */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char string[10];

   char *str1 = "abcdefghi";

   strncpy(string, str1, 3);

   string[3] = '\0';

   printf("%s\n", string);

   return 0;

}


Beispiel strnset
/* Beispiel strnset */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *string = "abcdefghijklmnopqrstuvwxyz";

   char letter = 'x';

   printf("string before strnset: %s\n", string);

   strnset(string, letter, 13);

   printf("string after  strnset: %s\n", string);

   return 0;

}


Beispiel strpbrk
/* Beispiel strpbrk */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *string1 = "abcdefghijklmnopqrstuvwxyz";

   char *string2 = "onm";

   char *ptr;

   ptr = strpbrk(string1, string2);

   if (ptr)

      printf("strpbrk found first character: %c\n", *ptr);

   else

      printf("strpbrk didn't find character in set\n");

   return 0;

}


Beispiel  strrchr
/* Beispiel strrchr */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char string[15];

   char *ptr, c = 'r';

   strcpy(string, "This is a string");

   ptr = strrchr(string, c);

   if (ptr)

      printf("The character %c is at position: %d\n", c, ptr-string);

   else

      printf("The character was not found\n");

   return 0;

}


Beispiel strrev
/* Beispiel strrev */

#include <string.h>

#include <stdio.h>

int main(void)

{

   char *forward = "string";

   printf("Before strrev(): %s\n", forward);

   strrev(forward);

   printf("After strrev():  %s\n", forward);

   return 0;

}


Beispiel strset
/* Beispiel strset */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char string[10] = "123456789";

   char symbol = 'c';

   printf("Before strset(): %s\n", string);

   strset(string, symbol);

   printf("After strset():  %s\n", string);

   return 0;

}


Beispiel strstr
/* Beispiel strstr */

#include <stdio.h>

#include <string.h>

int main(void)

{

   char *str1 = "Borland International", *str2 = "nation", *ptr;

   ptr = strstr(str1, str2);

   printf("The substring is: %s\n", ptr);

   return 0;

}


Beispiel _strtime
/* Beispiel _strtime */

#include <time.h>

#include <stdio.h>

void main(void)

{

  char datebuf[9];

  char timebuf[9];

  _strdate(datebuf);

  _strtime(timebuf);

  printf("Date: %s  Time: %s\n",datebuf,timebuf);

}


Beispiel strtok
/* Beispiel strtok */

 #include <string.h>

 #include <stdio.h>

 int main(void)

 {

    char input[16] = "abc,d";

    char *p;

     /* strtok setzt ein abschließendes Nullzeichen

    vor das Zeichen, wenn eines gefunden wurde */

    p = strtok(input, ",");

    if (p)   printf("%s\n", p);

     /* Ein zweiter Aufruf von strtok, wobei NULL als

       erster Parameter verwendet wird,liefert einen

       Zeiger auf das Zeichen, das dem Symbol folgt */

    p = strtok(NULL, ",");

    if (p)   printf("%s\n", p);

    return 0;

 }


Beispiel strxfrm
/* Beispiel strxfrm */

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

   char *target;

   char *source = "Frank Borland";

   int length;

    /* Reserviert Speicherplatz für den Zielstring */

   target = (char *) calloc(80, sizeof(char));

    /* Kopiert die Quelle zum Ziel und liefert die Länge */

   length = strxfrm(target, source, 80);

    /* Druckt die Ergebnisse aus */

   printf("%s has the length %d\n", target, length);

   return 0;

}


Beispiel swab
/* Beispiel swab */

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

char source[15] = "rFna koBlrna d";

char target[15];

int main(void)

{

   swab(source, target, strlen(source));

   printf("This is target: %s\n", target);

   return 0;

}


Beispiel system
/* Beispiel system */

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   printf("About to spawn command.com and run a DOS command\n");

   system("dir");

   return 0;

}


Beispiel tell
/* Beispiel tell */

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

int main(void)

{

   int handle;

   char msg[] = "Hello world";

   if ((handle = open("TEST.$$$", O_CREAT | O_TEXT | O_APPEND)) == -1)

   {

      perror("Error:");

      return 1;

   }

   write(handle, msg, strlen(msg));

   printf("The file pointer is at byte %ld\n", tell(handle));

   close(handle);

   return 0;

}


Beispiel tempnam
/* Beispiel tempnam */

#include <stdio.h>

#include <stdlib.h>

void main(void)

{

  FILE *stream;

  int i;

  char *name;

  for (i = 1; i <= 10; i++) {

    if ((name = tempnam("\\tmp","wow")) == NULL)

      perror("tempnam couldn't create name");

    else {

      printf("Creating %s\n",name);

      if ((stream = fopen(name,"wb")) == NULL)

        perror("Could not open temporary file\n");

      else

        fclose(stream);

    }

    free(name);

  }

  printf("Warning: temp files not deleted.\n");

}


Beispiel textmode
/* Beispiel textmode */

#include <conio.h>

int main(void)

{

   textmode(BW40);

   cprintf("ABC");

   getch();

   textmode(C40);

   cprintf("ABC");

   getch();

   textmode(BW80);

   cprintf("ABC");

   getch();

   textmode(C80);

   cprintf("ABC");

   getch();

   textmode(MONO);

   cprintf("ABC");

   getch();

   return 0;

}


Beispiel tmpfile
/* Beispiel tmpfile */

#include <stdio.h>

#include <process.h>

int main(void)

{

   FILE *tempfp;

   tempfp = tmpfile();

   if (tempfp)

      printf("Temporary file created\n");

   else

   {

      printf("Unable to create temporary file\n");

      exit(1);

   }

   return 0;

}


Beispiel tmpnam
/* Beispiel tmpnam */

#include <stdio.h>

int main(void)

{

   char name[13];

   tmpnam(name);

   printf("Temporary name: %s\n", name);

   return 0;

}


Beispiel toascii
/* Beispiel toascii */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

   int number, result;

   number = 511;

   result = toascii(number);

   printf("%d %d\n", number, result);

   return 0;

}


Beispiel tzset
/* Beispiel tzset */

#include <time.h>

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

   time_t td;

   putenv("TZ=PST8PDT");

   tzset();

   time(&td);

   printf("Current time = %s\n", asctime(localtime(&td)));

   return 0;

}


Beispiel ungetc
/* Beispiel ungetc */

#include <stdio.h>

#include <ctype.h>

int main( void )

{

   int i=0;

   char ch;

   puts("Input an integer followed by a char:");

    /* Liest Zeichen ein, bis keine Zahl oder ein EOF auftritt */

   while((ch = getchar()) != EOF && isdigit(ch))

      i = 10 * i + ch - 48;  /* Wandelt ASCII in Integer-Wert um */

    /* Wenn kein Zeichen gelesen wurde, das eine Zahl enthält,
    wird es zurück auf den Eingabepuffer gelegt */

   if (ch != EOF)

      ungetc(ch, stdin);

   printf("i = %d, next char in buffer = %c\n", i, getchar());

   return 0;

}


Beispiel ungetch
/* Beispiel ungetch */

#include <stdio.h>

#include <ctype.h>

#include <conio.h>

int main( void )

{

   int i=0;

   char ch;

   puts("Input an integer followed by a char:");

    /* Liest Zeichen ein, bis keine Zahl oder ein EOF auftritt */

   while((ch = getche()) != EOF && isdigit(ch))

      i = 10 * i + ch - 48;  /* convert ASCII into int value */

    /* Wenn kein Zeichen gelesen wurde, das eine Zahl enthält,
    wird es zurück auf den Eingabepuffer gelegt */

   if (ch != EOF)

      ungetch(ch);

   printf("\n\ni = %d, next char in buffer = %c\n", i, getch());

   return 0;

}


Beispiel unixtodos
/* Beispiel unixtodos */

#include <stdio.h>

#include <dos.h>

char *month[] = {"---", "Jan", "Feb", "Mar", "Apr", "May", "Jun",

                        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

#define SECONDS_PER_DAY 86400L   /* Anzahl der Sekunden eines Tages */

struct date dt;

struct time tm;

int main(void)

{

   unsigned long val;

 /* Erhält heutiges Datum und Zeit */

   getdate(&dt);

   gettime(&tm);

   printf("today is %d %s %d\n", dt.da_day, month[dt.da_mon], dt.da_year);

 /* Wandelt Datum und Zeit in das Format von Unix um (Anzahl der Sekunden bis zum 1. Januar 1970 */

   val = dostounix(&dt, &tm);

 /* Subtrahiert 42 Tage vom Wert der Sekunden*/

   val -= (SECONDS_PER_DAY * 42);

 /* Wandelt Datum und Zeit zurück zu DOS */

   unixtodos(val, &dt, &tm);

   printf("42 days ago it was %d %s %d\n",

          dt.da_day, month[dt.da_mon], dt.da_year);

   return 0;

}


Beispiel unlink
/* Beispiel unlink */

#include <stdio.h>

#include <io.h>

int main(void)

{

   FILE *fp = fopen("junk.jnk","w");

   int status;

   fprintf(fp,"junk");

   status = access("junk.jnk",0);

   if (status == 0)

      printf("File exists\n");

   else

      printf("File doesn't exist\n");

   fclose(fp);

   unlink("junk.jnk");

   status = access("junk.jnk",0);

   if (status == 0)

      printf("File exists\n");

   else

      printf("File doesn't exist\n");

   return 0;

}


Beispiel umask
/* Beispiel umask */

#include <io.h>

#include <stdio.h>

#include <sys\stat.h>

#define FILENAME "TEST.$$$"

int main(void)

{

    unsigned oldmask;

    FILE *f;

    struct stat statbuf;

     /* Führt dazu, daß nachfolgende Dateien nur zum Lesen sind */

    oldmask = umask(S_IWRITE);

    printf("Old mask = 0x%x\n",oldmask);

     /* Erzeugt eine Datei der Länge 0 */

    if ((f = fopen(FILENAME,"w+")) == NULL)

    {

        perror("Unable to create output file");

        return (1);

    }

    fclose(f);

     /* Stellt sicher, daß die Datei nur zum Lesen ist */

    if (stat(FILENAME,&statbuf) != 0)

    {

        perror("Unable to get information about output file");

        return (1);

    }

    if (statbuf.st_mode & S_IWRITE)

        printf("Error! %s is writable!\n",FILENAME);

    else

        printf("Success! %s is not writable.\n",FILENAME);

    return (0);

}


Beispiel utime
/* Beispiel utime */

 /* Kopiert den Zeitstempel von einer Datei in eine andere */

#include <sys\stat.h>

#include <utime.h>

#include <stdio.h>

int main( int argc, char *argv[] )

{

  struct stat src_stat;

  struct utimbuf times;

  if(argc != 3) {

    printf( "Usage: copytime <source file> <dest file>\n" );

    return 1;

  }

  if (stat(argv[1],&src_stat) != 0) {

    perror("Unable to get status of source file");

    return 1;

  }

  times.modtime = times.actime = src_stat.st_mtime;

  if (utime(argv[2],&times) != 0) {

    perror("Unable to set time of destination file");

    return 1;

  }

  return 0;

}


Beispiel va_arg
/* Beispiel va_arg */

#include <stdio.h>

#include <stdarg.h>

 /* Berechnet die Summe einer durch 0 abgeschlossenen Liste */

void sum(char *msg, ...)

{

   int total = 0;

   va_list ap;

   int arg;

   va_start(ap, msg);

   while ((arg = va_arg(ap,int)) != 0) {

      total += arg;

   }

   printf(msg, total);

   va_end(ap);

}

int main(void) {

   sum("The total of 1+2+3+4 is %d\n", 1,2,3,4,0);

   return 0;

}


Beispiel wherex und wherey
/* Beispiel wherex und wherey */

#include <conio.h>

int main(void)

{

   clrscr();

   gotoxy(10,10);

   cprintf("Current location is X: %d  Y: %d\r\n", wherex(), wherey());

   getch();

   return 0;

}


Beispiel window
/* Beispiel window */

#include <conio.h>

int main(void)

{

   window(10,10,40,11);

   textcolor(BLACK);

   textbackground(WHITE);

   cprintf("This is a test\r\n");

   return 0;

}


Beispiel getpsp
/* Beispiel getpsp */

#include <stdio.h>

#include <dos.h>

int main(void)

{

   static char command[128];

   char far *cp;

   int len, i;

   printf("The program segment prefix is: %u\n", getpsp());

 /*

_psp wird auf ein Segment von PSP vorgesetzt. Die Kommandozeile wird sich bei einem Offset von 0x81 ab dem Beginn von PSP befinden

*/

   cp = (char *) MK_FP(_psp, 0x80);

   len = *cp;

   for (i = 0; i < len; i++)

      command[i] = cp[i+1];

   printf("Command line: %s\n", command);

   return 0;

}


Beispiel stackavail
/* Beispiel stackavail */

 #include <malloc.h>

 #include <stdio.h>

 int main(void)

 {

   char *buf;

   printf("\nThe stack: %u\tstack pointer: %u", stackavail(), _SP);

   buf = (char *) alloca(100 * sizeof(char));

   printf("\nNow, the stack: %u\tstack pointer: %u", stackavail(), _SP);

   return 0;

 }

  /* ************************************************

      Ausgabe des Programms

      The stack: 64046       stack pointer: 65524

      Now, the stack: 63946  stack pointer: 65424

    ************************************************ */


Beispiel set_new_handler
/* Beispiel set_new_handler */

#include <iostream.h>

#include <new.h>

#include <stdlib.h>

void mem_warn() {

  cerr << "\nCan't allocate!";

  exit(1);

  }

void main(void) {

  set_new_handler(mem_warn);

  char *ptr = new char[100];

  cout << "\nFirst allocation: ptr = " << hex << long(ptr);

  ptr = new char[64000U];

  cout << "\nFinal allocation: ptr = " << hex << long(ptr);

  set_new_handler(0);  // Rücksetzen auf den Vorgabewert.

}


Beispiel isalpha
/* Beispiel isalpha */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isalpha(c))

    printf("%c is alphabetical\n",c);

  else printf("%c is not alphabetical\n",c);

  return 0;

}


Beispiel isalnum
/* Beispiel isalnum */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isalnum(c))

    printf("%c is alphanumeric\n",c);

  else printf("%c is not alphanumeric\n",c);

  return 0;

}


Beispiel isascii
/* Beispiel isascii */

#include <stdio.h>

#include <ctype.h>

#include <stdio.h>

int main(void)

{

  char c = 'C';

  if (isascii(c))

    printf("%c is ascii\n",c);

  else printf("%c is not ascii\n",c);

  return 0;

}


Beispiel iscntr
/* Beispiel iscntrl */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (iscntrl(c))

    printf("%c is a control character\n",c);

  else printf("%c is not a control character\n",c);

  return 0;

}


Beispiel isdigit
/* Beispiel isdigit */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isdigit(c))

    printf("%c is a digit\n",c);

  else printf("%c is not a digit\n",c);

  return 0;

}


Beispiel isgraph
/* Beispiel isgraph */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isgraph(c))

    printf("%c is a graphic character\n",c);

  else printf("%c is not a graphic character\n",c);

  return 0;

}


Beispiel islower
/* Beispiel islower */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (islower(c))

    printf("%c is a lowercase character\n",c);

  else printf("%c is not a lowercase character\n",c);

  return 0;

}


Beispiel isprint
/* Beispiel isprint */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isprint(c))

    printf("%c is a printable character\n",c);

  else printf("%c is not a printable character\n",c);

  return 0;

}


Beispiel ispunct
/* Beispiel ispunct */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (ispunct(c))

    printf("%c is a punctuation character\n",c);

  else printf("%c is not a punctuation character\n",c);

  return 0;

}


Beispiel isspace
/* Beispiel isspace */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isspace(c))

    printf("%c is white space\n",c);

  else printf("%c is not white space\n",c);

  return 0;

}


Beispiel isupper
/* Beispiel isupper */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isupper(c))

    printf("%c is an uppercase character\n",c);

  else printf("%c is not an uppercase character\n",c);

  return 0;

}


Beispiel isxdigit
/* Beispiel isxdigit */

#include <stdio.h>

#include <ctype.h>

int main(void)

{

  char c = 'C';

  if (isxdigit(c))

    printf("%c is a hexidecimal digit\n",c);

  else printf("%c is not a hexidecimal digit\n",c);

  return 0;

}


Beispiel mblen
/* Beispiel mblen */

#include <stdlib.h>

#include <stdio.h>

void main (void)

{

  int i ;

  char *mulbc = (char *)malloc( sizeof( char) );

  wchar_t widec = L'a';

  printf (" convert a wide character to multibyte character:\n" );

  i = wctomb (mulbc, widec);

  printf( "\tCharacters converted: %u\n", i);

  printf( "\tMultibyte character: %x\n\n", mulbc);

  printf( " Find length--in byte-- of multibyte character:\n");

  i = mblen( mulbc, MB_CUR_MAX);

  printf("\tLenght--in bytes--if multiple character: %u\n",i);

  printf("\tWide character: %x\n\n", mulbc);

  printf( " Attempt to find length of a Wide character Null:\n");

  widec = L'\0';

  wctomb(mulbc, widec);

  i = mblen( mulbc, MB_CUR_MAX);

  printf("\tLenght--in bytes--if multiple character: %u\n",i);

  printf("\tWide character: %x\n\n", mulbc);

}


Beispiel mbstowcs
/* Beispiel mbstowcs */

#include <stdio.h>

#include <stdlib.h>

void main(void)

{

  int x;

  char    *mbst = (char *)malloc(MB_CUR_MAX);

  wchar_t *pwst = L"Hi";

  wchar_t *pwc      = (wchar_t *)malloc(sizeof( wchar_t));

  printf ("Convert to multibyte string:\n");

  x = wcstombs (mbst, pwst, MB_CUR_MAX);

  printf ("\tCharacters converted %u\n",x);

  printf ("\tHEx value of first");

  printf (" multibyte character: %#.4x\n\n", mbst);

  printf ("Convert back to wide character string:\n");

  x = mbstowcs(pwc, mbst, MB_CUR_MAX);

  printf( "\tCharacters converted: %u\n",x);

  printf( "\tHex value of first");

  printf( "wide character: %#.4x\n\n", pwc);

}


Beispiel mbtowc
/* Beispiel mbtowc */

#include <stdlib.h>

#include<stdio.h>

void main(void)

{

  int     x;

  char     *mbchar    = (char *)calloc(1, sizeof( char));

  wchar_t  wchar      = L'a';

  wchar_t   *pwcnull = NULL;

  wchar_t  *pwchar    = (wchar_t *)calloc(1,  sizeof( wchar_t ));

  printf ("Convert a wide character to multibyte character:\n");

  x = wctomb( mbchar, wchar);

  printf( "\tCharacters converted: %u\n", x);

  printf( "\tMultibyte character: %x\n\n", mbchar);

  printf ("Convert multibyte character back to a wide character:\n");

  x = mbtowc( pwchar, mbchar, MB_CUR_MAX );

  printf( "\tBytes converted: %u\n", x);

  printf( "\tWide character: %x\n\n", pwchar);

  printf ("Atempt to convert when target is NULL\n" );

  printf (" returns the length of the multibyte character:\n" );

  x = mbtowc (pwcnull, mbchar, MB_CUR_MAX );

  printf ( "\tlength of multibyte character:%u\n\n", x );

  printf ("Attempt to convert a NULL pointer to a" );

  printf (" wide character:\n" );

  mbchar = NULL;

  x = mbtowc (pwchar, mbchar, MB_CUR_MAX);

  printf( "\tBytes converted: %u\n", x );

  }


Beispiel MK_FP
/* Beispiel MK_FP */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <dos.h>

#include <malloc.h>

main()

{

  char *str = "hello\n";

  char far *farstr;

  printf ("the address pointed to by str is %04X:%04X\n",

    FP_SEG(str), FP_OFF(str));

  farstr = (char far *)MK_FP( FP_SEG(str),  FP_OFF(str));

  printf ("the string pointed by far pointer is %s\n", farstr);

  return 0;

}


Beispiel _msize
/* Beispiel _msize */

 /* _msize arbeitet als 32-Bit-Befehl, nicht als 16-Bit-Befehl */

#include <malloc.h>         /* malloc() _msize() */

#include <stdio.h>             /* printf() */

int main( )

{

  int size;

  int *buffer;

  buffer = malloc(100 * sizeof(int));

  size = _msize(buffer);

  printf("Allocated %d bytes for 100 integers\n", size);

  return(0);

}


Beispiel offsetof
/* Beispiel offsetof */

 /*

Dieses Programm verwendet den Offset des Befehls, um den Effekt beim

Wechseln der Ausrichtungsgrenzen innerhalb einer Struktur zu zeigen.

Es produziert die folgende Ausgabe:

  In STRUCT1, two_bytes begins at byte 1.

  In STRUCT2, two_bytes begins at byte 2.

Bei der Standardvorgabe richtet der 16-Bit-Compiter die Strukturelemente

an 1-Byte-Grenzen aus. Mit den gesetzten Flag -a2 richtet der Compiler

Felder an geraden Grenzen aus.

Die CPU führt Strukturelemente von Prozessen schneller aus,

wenn sie an geraden Grenzen ausgerichtet sind

*/

#include <stddef.h>      // offsetof()

#include <stdio.h>      // printf()

#pragma option -a1      // Ausrichtung an Bytes (Vorgabe)

typedef struct {

  char one_byte;

  int two_bytes;

} STRUCT1;

#pragma option -a2      // Ausrichtung an geraden Bytes

typedef struct {

  char one_byte;

  int two_bytes;

} STRUCT2;

#pragma option -a.      // Kommandozeilenoption wiederherstellen

void main()

{

  printf( "In STRUCT1, two_bytes begins at byte %d.\n",

    offsetof(STRUCT1, two_bytes) );

  printf( "In STRUCT2, two_bytes begins at byte %d.\n",

    offsetof(STRUCT2, two_bytes) );

}


Beispiel _pipe
/* Beispiel _pipe */

#include <stdlib.h>

#include <stdio.h>

#include <io.h>

#include <fcntl.h>

#include <process.h>

void main(int argc, char *argv[])

{

    int handles[2];

    int retcode, stat, pid;

    char asc_handle[10];

    if (argc > 1)    /* Das ist das untergeordnete Element */

    {

         /* Erhält von der Kommandozeile das Pipe-Handle zum lesen

         * und setzt das Handle auf binär.

         */

        handles[0] = atoi(argv[1]);

        setmode(handles[0],O_BINARY);

         /* Liest den gewünschten Rückgabe-Code von Pipe

         */

        if (read(handles[0], &amp.retcode, sizeof(retcode)) < 0)

        {

            perror("Child&colon. unable to read pipe");

            retcode = 255;

        }

        printf("Child&colon. returning %d to parent\n",retcode);

        exit(retcode);

    }

    else             /* Das sind die übergeordneten Elemente.*/

    {

         /* Öffnet eine Pipe, wandelt die Nummer des Handles zum Lesen in ASCII um.

         * Schreibt einen Wert in die Pipe, die der untergeordnete Prozeß als seinen

         * Rückgabe-Code verwenden wird.

         */

        if (_pipe(handles,256,O_BINARY) == -1)

        {

            perror("Parent&colon. unable to create pipe");

            exit(1);

        }

        sprintf(asc_handle,"%d",handles[0]);

        retcode = 10;

        if (write(handles[1],&amp.retcode,sizeof(retcode)) < 0)

        {

            perror("Parent&colon. unable to write to pipe");

            exit(1);

        }

         /* Ruft uns selbst mit dem Handle für das Lesen als Argument auf.

         */

        if ((pid = spawnl(P_NOWAIT, argv[0], argv[0],

                          asc_handle, NULL)) == -1)

            perror("Parent&colon. spawnl failed");

        else

        {

            printf("Parent&colon. spawned child process %d\n",pid);

            if (wait(&amp.stat) != pid)

                perror("Parent&colon. wait failure");

            else

            {

                if ((stat &amp. 0xff) == 0)

                    printf("Parent&colon. child returned %d\n", stat >> 8);

                else

                    printf("Parent&colon. child terminated abnormally\n");

            }

        }

        close(handles[0]);

        close(handles[1]);

        exit(0);

    }

}


Beispiel send
/* Beispiel send */

 /*

 Es gibt zwei kurze Programme hier. SEND bringt einen untergeordneten Prozeß RECEIVE

 hervor. Jeder Prozeß hält eine Ende einer Pipe. Der übergeordnete Prozeß überträgt

 sein Kommandozeilenargument an das untergeordnete Element, das den String ausdruckt und sich

 beendet.

 WICHTIG: Der übergeordnete Prozeß muß mit der Datei \32bit\fileinfo.obj

 verknüpft sein. Der Quelltext in fileinfo ermöglicht es einem

 übergeordneten Prozeß, die Handles mit einem untergeordnetem Element zu teilen. Ohne diese

 zusätzliche Information kann das untergeordnete Element das erhaltene Handle nicht

 verwenden.

*/

 /* SEND */

#include <fcntl.h>            // _pipe()

#include <io.h>            // write()

#include <process.h>          // spawnl() cwait()

#include <stdio.h>          // puts() perror()

#include <stdlib.h>          // itoa()

#include <string.h>          // strlen()

#define DECIMAL_RADIX 10      // für atoi()

enum PIPE_HANDLES { IN, OUT }; // um das Array von Handles zu indizieren

int main(int argc, char *argv[])

{

  int handles[2];           // Pipe-Handles

// Intern und extern gebundene Pipe-Handles

  char handleStr[10];        // Ein Handle,

// gespeichert als String

  int pid;

  // ID des Systems für den untergeordneten Prozeß

  if (argc <= 1)

  {

    puts("No message to send.");

    return(1);

  }

  if (_pipe(handles, 256, O_TEXT) != 0)

  {

    perror("Cannot create the pipe");

    return(1);

  }

  // Speichern des Handles als String, zur Übergabe an die Kommandozeile

  itoa(handles[IN], handleStr, DECIMAL_RADIX);

  // Erzeugt den untergeordneten Prozeß und übergibt Ihn an das intern eingebundend Pipe-Handle

     spawnl(P_NOWAIT, "receive.exe", "receive.exe", handleStr, NULL);

  // Überträgt die Nachricht

  write(handles[OUT], argv[1], strlen(argv[1])+1);

  // Wenn mit der Pipe fertig, werden beide Handles geschlossen

  close(handles[IN]);

  close(handles[OUT]);

  // Wartet zum Beenden auf das untergeordnete Element

  wait(NULL);

  return(0);

}


Beispiel _setcursortype
/* Beispiel _setcursortype */

#include <conio.h>

int main( )

{

  // Erzählt dem Anwender, was zu tun ist

  clrscr();

  cputs("Press any key three times.\n\r");

  cputs("Each time the cursor will change shape.\n\r");

  gotoxy(1,5);           // Zeigt einen gefüllten Cursor

  cputs("Now the cursor is solid.\n\r");

  _setcursortype(_SOLIDCURSOR);

  while(!kbhit()) {};         // Wartet darauf, weiterzumachen

  getch();

  gotoxy(1,5);           // Entfernt den Cursor

  cputs("Now the cursor is gone.");

  clreol();

  gotoxy(1,6);

  _setcursortype(_NOCURSOR);

  while(!kbhit()) {};         // Wartet darauf, weiterzumachen

  getch();

  gotoxy(1,5);                 // Zeigt einen normalen Cursor

  cputs("Now the cursor is normal.");

  clreol();

  gotoxy(1,6);

  _setcursortype(_NORMALCURSOR);

  while(!kbhit()) {};         // Wartet darauf, weiterzumachen

  getch();

  clrscr();

  return(0);

}


Beispiel _dos_commit
/* Beispiel _dos_commit */

#include <dos.h>

#include <errno.h>

#include <conio.h>

void main(void)

{

  char save[]  = "to disk.",

  prompt[]     = " File exist,overwrite?[y/n]",

  err[]      = "Error occured. ",

  newline[]  = "\n\r";

int handle, ch;

unsigned count;

   /* Öffnet Datei, erzeugt und überschreibt */

  if (_dos_createnew( "DUMMY.FIL",_A_NORMAL, &handle) !=0)

  {

    if (errno == EEXIST)

    {

     /* Verwendet _dos_write, um Systemmeldungen anzuzeigen */

    _dos_write (1, prompt, sizeof( prompt ) -1, &count );

    ch = bdos( 1, 0, 0) & 0x00ff;

    if ( (ch == 'y') || (ch == 'Y') )

      _dos_creat( "DUMMY.FIL", _A_NORMAL, &handle);

    _dos_write( 1,newline, sizeof( newline) -1, &count);

    }

  }

   /* Schreibt in eine Datei; Ausgabe wird durch Betriebssystempuffer weitergeleitet */

  if ( _dos_write( handle, save, sizeof( save ),&count) != 0 )

  {

  _dos_write( 1, err, sizeof( err) - 1, &count );

  _dos_write( 1, newline, sizeof( newline ) -1, &count );

  }

   /* Schreibt direkt und ohne zwischenpuffern in eine Datei */

  if ( _dos_commit( handle ) != 0 )

  {

  _dos_write( 1, err, sizeof(err) -1, &count);

  _dos_write( 1, newline, sizeof( newline ) - 1 , &count);

  }

   /* Schließt Datei */

  if (_dos_close( handle ) != 0)

  {

  _dos_write( 1, err, sizeof(err) -1, &count );

  _dos_write( 1, newline, sizeof(newline) -1, &count );

  }

}


Beispiel _expand
/* Beispiel _expand */

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

void main(void)

{

  char *bufchar;

  printf( "Allocate a 512 element buffer\n" );

  if( (bufchar = (char *) calloc(512, sizeof( char ) )) == NULL)

    exit( 1 );

  printf( "Allocated %d bytes at %Fp\n",

    _msize ( bufchar ), (void __far *)bufchar );

  if ((bufchar = (char *) _expand (bufchar, 1024)) == NULL)

    printf ("can not expand");

  else

    printf (" Expanded block to %d bytes at %Fp\n",

      _msize( bufchar ) , (void __far *)bufchar );

 /* Gibt Speicherplatz frei  */

  free( bufchar );

  exit (0);

}


Beispiel _get_osfhandle
/* Beispiel _get_osfhandle und _open_osfhandle */

#include <windowsx.h>

#include <fcntl.h>

#include <stdio.h>

#include <io.h>

#ifndef __FLAT__

#error This example must be compiled using 32 bit compiler

#endif

//Beispiel für _get_osfhandle() und _open_osfhandle()

BOOL InitApplication(HINSTANCE hInstance);

HWND InitInstance(HINSTANCE hInstance, int nCmdShow);

LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,

            WPARAM wParam, LPARAM lParam);

example_get_osfhandle(HWND hWnd);

#pragma argsused

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

        LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;      // Botschaft

  if (!InitApplication(hInstance))  // Initialiert gemeinsam benutzte Dinge

   return (FALSE); // Beenden, falls nicht initialisiert werden kann

   /* Führt Initialisierungen aus, die zu einer besonderen Instanz gehören */

  if (!(InitInstance(hInstance, nCmdShow)))

   return (FALSE);

   /* Erwirbt und verteilt Botschaften, bis eine Botschaft WM_QUIT erhalten wird. */

  while (GetMessage(&msg, // Botschaftsstruktur

   NULL, // Handles des die Nachricht erhaltenden Fensters

   NULL, // unterste Nachricht zum Überprüfen

   NULL))  // oberste Nachricht zum Überprüfen

  {

  TranslateMessage(&msg); // Übersetzt die virtuellen Tastencodes

  DispatchMessage(&msg);  // Verteilt die Botschaft an das Fenster

  }

  return (msg.wParam);  // Liefert den Wert von PostQuitMessage zurück

}

BOOL InitApplication(HINSTANCE hInstance)

{

  WNDCLASS  wc;

  // Füllt die Klassenstruktur der Fenster mit Parametern die das Hauptfenster

  // beschreiben

  wc.style = CS_HREDRAW | CS_VREDRAW; // Klassenstil(e).

  wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int, long ))MainWndProc; // Funktion für den

                // Empfang von Botschaften für Fenster dieser Klasse.

  wc.cbClsExtra = 0;  // Keine Extra-Daten für jede Klasse.

  wc.cbWndExtra = 0;  // Keine Extra-Daten für jede Klasse.

  wc.hInstance = hInstance; // Anwendung, der die Klasse gehört.

  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

  wc.hCursor = LoadCursor(NULL, IDC_ARROW);

  wc.hbrBackground = GetStockObject(WHITE_BRUSH);

  wc.lpszMenuName = NULL;  // Name der Menü-Ressource in der Datei .RC.

  wc.lpszClassName = "example"; // Name, der beim Aufruf von CreateWindow verwendet wird.

   /* Registriert die Fensterklasse und gibt den Code für den Erfolg/Mißerfolg zurück. */

  return (RegisterClass(&wc));

}

HWND InitInstance(HINSTANCE hInstance, int nCmdShow)

{

  HWND  hWnd; // Handle des Hauptfenster.

   /* Erzeugt ein Hauptfenster für die Instanz dieser Anwendung.  */

  hWnd = CreateWindow(

   "example",                 // Siehe den Aufruf von RegisterClass().

   "example _get_osfhandle _open_osfhandle (32 bit)",  // Text für die Titelleiste des Fenters.

   WS_OVERLAPPEDWINDOW,        // Fensterstil.

   CW_USEDEFAULT,         // Standardmäßige horizontale Position.

   CW_USEDEFAULT,          // Standardmäßige vertikale Position.

   CW_USEDEFAULT,            // Standardbreite.

   CW_USEDEFAULT,        // Standardhöhe.

   NULL,                  // Überlappende Fenster sind ohne übergeordnete Elemente.

   NULL,                  // Verwendet das Menü der Fensterklasse.

   hInstance,              // Diese Instanz besitzt dieses Fenster.

   NULL                   // Zeiger nicht gebraucht.

  );

   /* Liefert "failure", falls Fenster nicht erzeugt werden kann */

  if (!hWnd)

   return (FALSE);

   /* Macht das Fenster sichtbar; aktualisiert seinen Client-Bereich; liefert "success" zurück */

  ShowWindow(hWnd, nCmdShow); // Zeigt die Fenster

  UpdateWindow(hWnd);     // Sender Botschaft WM_PAINT

  return (hWnd);        // Liefert den Wert von PostQuitMessage

}

#pragma argsused

LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,

            WPARAM wParam, LPARAM lParam)

{

  switch (message)

  {

    case WM_CREATE:

    {

      example_get_osfhandle(hWnd);

      return NULL;

    }

    case WM_QUIT:

    case WM_DESTROY:  // Botschaft: Fenster entfernt

      PostQuitMessage(0);

    break;

    default:      // Weiterleiten, falls nicht bearbeitet

      return (DefWindowProc(hWnd, message, wParam, lParam));

  }

}

example_get_osfhandle(HWND hWnd)

{

    long osfHandle;

    char str[128];

    int fHandle = open("file1.c", O_CREAT|O_TEXT);

    if(fHandle != -1)

    {

      osfHandle = _get_osfhandle(fHandle);

      sprintf(str, "file handle = %lx OS file handle = %lx", fHandle, osfHandle);

      MessageBox(hWnd,str,"_get_osfhandle",MB_OK|MB_ICONINFORMATION);

      close(fHandle);

      fHandle = _open_osfhandle(osfHandle, O_TEXT );

      sprintf(str, "file handle = %lx OS file handle = %lx", fHandle, osfHandle);

      MessageBox(hWnd,str,"_open_osfhandle",MB_OK|MB_ICONINFORMATION);

         close(fHandle);

    }

    else

      MessageBox(hWnd,"File Open Error","WARNING",MB_OK|MB_ICONSTOP);

return 0;

}


Beispiel _heapset
/* Beispiel _heapset */

#include <windowsx.h>

#include <malloc.h>

#include <stdio.h>

#include <stdlib.h>

#ifndef __FLAT__

#error This example must be compiled using 32 bit compiler

#endif

BOOL InitApplication(HINSTANCE hInstance);

HWND InitInstance(HINSTANCE hInstance, int nCmdShow);

LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,

            WPARAM wParam, LPARAM lParam);

void ExampleHeapSet(HWND hWnd);

#pragma argsused

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

        LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;      // Botschaft

  if (!InitApplication(hInstance))  // Initialisiert gemeinsam verwendete Teile

   return (FALSE); // Beenden, falls nicht initialisiert werden konnte

   /* Führt Initialisierungen aus, die zu bestimmten Instanzen gehören */

  if (!(InitInstance(hInstance, nCmdShow)))

   return (FALSE);

   /* Erwirbt und verteilt Botschaften, bis eine Botschaft WM_QUIT erhalten wird. */

  while (GetMessage(&msg, // Botschaftsstruktur

   NULL, // Handle des Fensters, das die Botschaft erhält

   NULL, // niedrigste zu prüfende Botschaft

   NULL))  // höchste zu prüfende Botschaft

  {

  TranslateMessage(&msg); // Übersetzt virtuelle Tastencodes

  DispatchMessage(&msg);  // Leitet Nachrichten an Fenster weiter

  }

  return (msg.wParam);  // Liefert den Wert von PostQuitMessage

}

BOOL InitApplication(HINSTANCE hInstance)

{

  WNDCLASS  wc;

  // Füllt die Struktur der Fensterklasse mit Parametern, die das

  // Hauptfenster beschreiben.

  wc.style = CS_HREDRAW | CS_VREDRAW; // Klassenstil(e).

  wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int, long ))MainWndProc; // Funktion für den

                // Empfang von Botschaften für Fenster dieser Klasse.

  wc.cbClsExtra = 0;  // Keine Extra-Daten für jede Klasse.

  wc.cbWndExtra = 0;  // Keine Extra-Daten für jede Klasse.

  wc.hInstance = hInstance; // Anwendung, der die Klasse gehört.

  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

  wc.hCursor = LoadCursor(NULL, IDC_ARROW);

  wc.hbrBackground = GetStockObject(WHITE_BRUSH);

  wc.lpszMenuName = NULL;  // Name der Menü-Ressource in der Datei .RC.

  wc.lpszClassName = "Example"; // Name, der beim Aufruf von CreateWindow verwendet wird.

   /* Registriert die Fensterklasse und gibt den Code für den Erfolg/Mißerfolg zurück. */

  return (RegisterClass(&wc));

}

HWND InitInstance(HINSTANCE hInstance, int nCmdShow)

{

  HWND  hWnd; // Handle des Hauptfenster.

   /* Erzeugt ein Hauptfenster für die Instanz dieser Anwendung.  */

  hWnd = CreateWindow(

   "Example",                 // Siehe den Aufruf von RegisterClass().

   "Example _heapset 32 bit only",  // Text für die Titelleiste des Fenters.

   WS_OVERLAPPEDWINDOW,        // Fensterstil.

   CW_USEDEFAULT,         // Standardmäßige horizontale Position.

   CW_USEDEFAULT,          // Standardmäßige vertikale Position.

   CW_USEDEFAULT,            // Standardbreite.

   CW_USEDEFAULT,        // Standardhöhe.

   NULL,                  // Überlappende Fenster sind ohne übergeordnete Elemente.

   NULL,                  // Verwendet das Menü der Fensterklasse.

   hInstance,              // Diese Instanz besitzt dieses Fenster.

   NULL                   // Zeiger nicht gebraucht.

  );

   /* Liefert "failure", falls Fenster nicht erzeugt werden kann */

  if (!hWnd)

   return (FALSE);

   /* Macht das Fenster sichtbar; aktualisiert seinen Client-Bereich; liefert "success" zurück */

  ShowWindow(hWnd, nCmdShow); // Zeigt die Fenster

  UpdateWindow(hWnd);     // Sender Botschaft WM_PAINT

  return (hWnd);        // Liefert den Wert von PostQuitMessage

}

void ExampleHeapSet(HWND hWnd)

{

  int hsts;

  char *buffer;

  if ( (buffer = (char *)malloc( 1 )) == NULL )

    exit(0);

  hsts = _heapset( 'Z' );

  switch (hsts)

  {

    case _HEAPOK:

      MessageBox(hWnd,"Heap is OK","Heap",MB_OK|MB_ICONINFORMATION);

      break;

    case _HEAPEMPTY:

      MessageBox(hWnd,"Heap is empty","Heap",MB_OK|MB_ICONINFORMATION);

      break;

    case _HEAPBADNODE:

      MessageBox(hWnd,"Bad node in heap","Heap",MB_OK|MB_ICONINFORMATION);

      break;

    default:

      break;

  }

  free (buffer);

}

#pragma argsused

LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,

            WPARAM wParam, LPARAM lParam)

{

  switch (message) {

    case WM_CREATE:

    {

      //Example _heapset

      ExampleHeapSet(hWnd);

      return NULL;

    }

    case WM_QUIT:

    case WM_DESTROY:  // Botschaft: Fenster entfernt

      PostQuitMessage(0);

    break;

    default:      // Weiterleiten, falls nicht bearbeitet

      return (DefWindowProc(hWnd, message, wParam, lParam));

  }

}


Beispiel _searchstr
/* Beispiel _searchstr */

#include <stdio.h>

#include <stdlib.h>

char buf[_MAX_PATH];

int main(void)

{

   /* look for TLINK.EXE */

  _searchstr("TLINK.EXE", "PATH", buf);

  if (buf[0] == '\0')

  printf ("TLINK.EXE not found\n");

  else

  printf ("TLINK.EXE found in %s\n", buf);

  return 0;

}


Beispiel  _popen und _pclose
/* Beispiel _popen und _pclose */

 /* Dieses Programm initiiert einen Kundprozeß, um den Befehl der laufen zu lassen und schickt

   die Verzeichnisliste über eine Pipe vom untergeordneten Element zu seinem übergeordneten Prozeß

*/

#include <stdio.h>     // popen() pclose() feof() fgets() puts()

#include <string.h>    // strlen()

int main( )

{

  FILE* handle;        // Behandelt das eine Ende der pipe

  char message[256];   // Puffer für Text, der durch die Pipe geschickt wird

  int status;          // Funktionsrückgabewert

  // Öffnet eine Pipe zum Textempfang von einem Prozeß, der ein "DIR" ausführt

  handle = _popen("dir /b", "rt");

  if (handle == NULL)

  {

    perror("_popen error");

  }

  // Liest und leitet die Eingabe weiter, die vom untergeordneten Prozeß empfangen wurde

  while (fgets(message, sizeof(message), handle))

  {

    fprintf(stdout, message);

  }

  // Schließt die Pipe und prüft den Status für die Rückgabe

    status = _pclose(handle);

  if (status == -1)

  {

    perror("_pclose error");

  }

  return(0);

}


Beispiel wctomb
/* Beispiel wctomb */

#include <stdio.h>

#include <stdlib.h>

void main(void)

{

  int x;

  wchar_t wc = L'a';

  char *pmbNULL = NULL;

  char *pmb = (char *)malloc(sizeof( char ));

  printf (" Convert a wchar_t array into a multibyte string:\n");

  x = wctomb( pmb, wc);

  printf ("Character converted: %u\n", x);

  printf ("Multibyte string: %1s\n\n",pmb);

  printf (" Convert when target is NULL\n");

  x = wctomb( pmbNULL, wc);

  printf ("Character converted: %u\n",x);

  printf ("Multibyte stri ng: %1s\n\n",pmbNULL);

}


Beispiel wcstombs
/* Beispiel wcstombs */

#include <stdio.h>

#include <stdlib.h>

void main(void)

{

  int x;

  char *pbuf = (char*)malloc( MB_CUR_MAX);

  wchar_t *pwcsEOL = L'\0';

  char *pwchi= L"Hi there!";

  printf (" Convert entire wchar string into a multibyte string:\n");

  x = wcstombs( pbuf, pwchi,MB_CUR_MAX);

  printf ("Character converted: %u\n", x);

  printf ("Multibyte string character: %1s\n\n",pbuf);

  printf (" Convert when target is NULL\n");

  x = wcstombs( pbuf, pwcsEOL, MB_CUR_MAX);

  printf ("Character converted: %u\n",x);

  printf ("Multibyte string: %1s\n\n",pbuf);

}


Laufzeitunterstützung

Siehe auch

Die folgenden Themen bieten eine detaillierte Beschreibung der Funktionen und Klassen zur Laufzeitunterstützung. Direkt unter dem Klassenkonstruktor finden Sie eine Liste der Klassenoperatoren und Elementfunktionen.

Klassen

Bad_cast

Bad_typeid

typeinfo

xalloc

xmsg

Funktionen

set_new_handler

set_terminate

set_unexpected

terminate

unexpected


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	+ 	 	+ 	+ 	 	+


Bad_cast (Klasse)

Siehe auch	Portabilität	Beispiel

Header-Datei

typeinfo.h

Beschreibung

Wenn die Funktion dynamic_cast bei der Typumwandlung einer Referenz fehlschlägt, kann der Ausdruck Bad_cast auslösen. Wenn dynamic_cast bei der Typumwandlung eines Zeigers fehlschlägt, ist das Ergebnis der NULL-Zeiger.


Bad_typeid (Klasse)

Siehe auch	Portabilität	Beispiel

Header-Datei

typeinfo.h

Beschreibung

Wenn der Operand von typeid ein dereferenzierter NULL-Zeiger ist, kann der Operator typeid die Exception Bad_typeid auslösen.


Portabilität

DOS	UNIX	Win 16	Win 32	ANSI C	ANSI C++	OS/2

 	+ 	 	+ 	+ 	 	+	+


set_new_handler (Funktion)
set_new_handler

Siehe auch	Portabilität

Header-Datei

new.h

Syntax

typedef void (new * new_handler)();

new_handler set_new_handler(new_handler my_handler);

Beschreibung

Die Funktion set_new_handler installiert die Funktion, die aufgerufen werden soll, wenn der globale Operator new oder new[]() den angeforderten Speicher nicht zuweisen kann. Per Voreinstellung lösen diese Operatoren dann eine Exception xalloc aus. Sie können dieses Standardverhalten ändern, indem Sie mit set_new_handler eine neue Behandlungsroutine festlegen. Wenn die herkömmliche Version von new beibehalten werden soll, die keine Exceptions auslöst, verwenden Sie set_new_handler(0).

Immer wenn der angeforderte Speicher nicht zugewiesen werden kann, wird die Behandlungsroutine aufgerufen, die mit einem vorangegangenen Aufruf von set_new_handler festgelegt wurde. Gibt es keine solche Routine, gibt new den Wert 0 zurück. my_handler sollte die Aktionen bestimmen, die ausgeführt werden müssen, wenn new die Speicheranforderung nicht erfüllen kann. Der in new.h definierte Typ new_handler ist eine Funktion, die keine Argumente entgegennimmt und void zurückgibt. Eine Routine new_handler kann eine Exception xalloc auslösen.

Die benutzerdefinierte Routine my_handler sollte folgende Aufgabe ausführen:

Nach Freigabe des Speichers zurückkehren.

Eine xalloc-Exceptions auslösen oder eine Exception, die von xalloc abgeleitet ist.

Eine der Funktionen abort oder exit aufrufen.

Wenn my_handler zurückkehrt, versucht new erneut, die Anforderung zu erfüllen.

Im Idealfall gibt my_handler den Speicher frei und kehrt zurück. Dann kann new die Anforderng erfüllen, und das Programm kann fortgesetzt werden. Wenn my_handler dagegen den Speicher für new  nicht zuweisen kann, muß my_handler das Programm mit einer Exception beenden. Andernfalls würde eine Endlosschleife erzeugt.

Vorzugsweise sollten Sie die Operatoren new() und new[]() überladen, um in Ihren Anwendungen geeignete Aktionen vorzusehen.

Rückgabewert

set_new_handler gibt die alte Behandlungsroutine zurück, wenn eine solche registriert ist.

Die benutzerdefinierte Argumentfunktion my_handler  sollte keinen Wert zurückgeben.


set_terminate

Siehe auch	Portabilität

Header-Datei

except.h

Syntax

typedef void (*terminate_function)();

terminate_function set_terminate(terminate_function t_func);

Beschreibung

Mit Hilfe der Funktion set_terminate kann eine Funktion installiert werden, die das Verhalten des Programms vorgibt, wenn für die Exception keine Behandlungsroutine gefunden werden kann. Die Aktionen sind in t_func definiert, die als Funktion des Typs terminate_function deklariert ist. Dieser Typ ist in except.h definiert, nimmt keine Argumente entgegen und gibt void zurück.

Per Voreinstellung bewirkt eine Exception, für die keine Behandlungsroutine gefunden werden kann, daß das Programm die Funktion terminate aufruft. Dies führt normalerweise zu einem Aufruf von abort. Das Programm endet dann mit der Meldung Abnormal program termination. Wenn von terminate eine andere Funktion als abort aufgerufen werden soll, definieren Sie Ihre eigene Funktion t_func. Diese wird dann von set_terminate als Beendigungsfunktion installiert und ermöglicht die Implementierung beliebiger Aktionen, die von abort nicht ausgeführt werden.

Rückgabewert

Die vorherige Funktion, die an set_terminate übergeben wurde, bildet den Rückgabewert.

Die Definition von t_func muß das Programm beenden. Eine solche benutzerdefinierte Funktion darf nicht zur aufrufenden Funktion terminate zurückkehren. Ein entsprechender Versuch resultiert in undefiniertem Programmverhalten. Ebenso wäre es ein Fehler, wenn t_func eine Exception auslöst.


set_unexpected

Siehe auch	Portabilität

Header-Datei

except.h

Syntax

typedef void ( * unexpected_function )();

unexpected_function set_unexpected(unexpected_function unexpected_func);

Beschreibung

Mit der Funktion set_unexpected kann eine Funktion installiert werden, die das Verhalten des Programms steuert, wenn eine Funktion eine Exception auslöst, für die keine Behandlung vorgesehen ist. Die Aktionen sind in unexpected_func definiert, die als Funktion des Typs unexpected_function deklariert ist. Der in except.h definierte Typ unexpected_function nimmt als Funktion keine Argumente entgegen und gibt void zurück.

Per Voreinstellung bewirkt eine unerwartete Exception, daß unexpected aufgerufen wird. Wenn die Funktion definiert ist, wird sie im folgenden von unexpected aufgerufen. Die Programmsteuerung geht auf die benutzerdefinierte unexpected_func über. Andernfalls wird terminate aufgerufen.

Rückgabewert

Die vorherige Funktion, die an set_unexpected übergeben wurde, bildet den Rückgabewert.

Die Definition von unexpected_func darf nicht zur aufrufenden unexpected-Funktion zurückkehren. Ein entsprechender Versuch führt zu undefiniertem Programmverhalten.

unexpected_func kann auch abort, exit oder terminate aufrufen.


terminate

Siehe auch	Portabilität

Header-Datei

except.h

Syntax

void terminate();

Beschreibung

Die Funktion terminate kann von der Funktion unexpected oder vom Programm aufgerufen werden, wenn für eine Exception keine Behandlungsroutine gefunden werden kann. Standardmäßig ruft terminate die Funktion abort auf. Durch diese Aktion wird das Programm sofort beendet.

Sie können das Verhalten des Programms ändern, wenn es beendet werden muß, weil eine Exception generiert wird, die nicht behandelt werden kann. Wenn Sie nicht wünschen, daß das Programm mit einem Aufruf von abort beendet wird, definieren Sie eine Funktion für diesen Fall. Eine solche Funktion (terminate_function) wird von terminate aufgerufen, wenn sie mit set_terminate registriert wurde.

Rückgabewert

Keiner.


typeinfo (Klasse)

Siehe auch	Portabilität	Beispiel

Header-Datei

typeinfo.h

Beschreibung

Die Klasse dient dazu, Informationen über einen Typ zu ermitteln.

Konstruktor

Es gibt lediglich einen als private deklarierten Konstruktor. Objekte der Klasse typeinfo können nicht direkt erzeugt werden. Der Compiler wird veranlaßt, die Objekte mit den Elementfunktionen von typeinfo auszustatten, wenn Sie die Typen als _ _rtti deklarieren oder die Compiler-Option -RT verwenden. typeinfo-Referenzen werden vom Operator typeid generiert.

Public-Elementfunktionen

name

before

Operatoren

==

!=


typeinfo::name

typeinfo (Klasse)

Syntax

const char* name() const;

Beschreibung

Diese Funktion gibt einen darstellbaren String zurück, der den Typ name des Operanden als typeid kennzeichnet. Der Speicherplatz für den String wird bei jedem Aufruf überschrieben.


typeinfo::before

typeinfo (Klasse)

Syntax

int before(const typeinfo&);

Beschreibung

Mit dieser Funktion kann die lexikalische Reihenfolge von Datentypen verglichen werden. Ein Vergleich der beiden Typen T1 und T2 hätte beispielsweise folgende Form:

typeid ( T1 ).before(typeid( T2 ));

Die Funktion before gibt 0 oder 1 zurück.


typeinfo::operator ==

typeinfo (Klasse)

Syntax

int operator==(const typeinfo &) const;

Beschreibung

Dieser Operator ermöglicht den Vergleich von typeinfos.


typeinfo::operator !=

typeinfo (Klasse)

Syntax

int operator!=(const typeinfo &) const;

Beschreibung

Dieser Operator ermöglicht den Vergleich von typeinfos.


// Beispiel

// LAUFZEIT-TYPINFORMATIONEN ERMITTELN

#include <iostream.h>

#include <typeinfo.h>

class __rtti Alpha {

   virtual void func() {};  // Alpha wird zu einer polymorphen Klasse

};

class B : public Alpha {};

int main(void) {

   B Binst;           // Klasse B instantiieren

   B *Bptr;           // Zeiger vom Typ B deklarieren

   Bptr = &Binst;     // Zeiger initialisieren

   // DIESE PRÜFUNGEN ERFOLGEN ZUR LAUFZEIT

   if (typeid( *Bptr ) == typeid( B ) )

       // Frage: "WIE LAUTET DER TYP VON *Bptr?"

       cout << "Der Name lautet " << typeid( *Bptr).name();

   if (typeid( *Bptr ) != typeid( Alpha ) )

       cout << "\nZeiger ist nicht vom Typ Alpha";

   return 0;

   }

// Program Output

// Name ist B

// Zeiger ist nicht vom Typ Alpha


unexpected

Siehe auch	Portabilität

Header-Datei

except.h

Syntax

void unexpected();

Beschreibung

Die Funktion unexpected wird aufgerufen, sobald eine Funktion eine Exception auslöst, die im Kontext dieser Funktion nicht vorgesehen ist. Das Programm ruft dann unexpected auf, wodurch wiederum eine benutzerdefinierte Funktion aufgerufen wird, die mit set_unexpected registriert wurde. Wenn es keine solche Funktion gibt, ruft unexpected die Funktion terminate auf.

Rückgabewert

Keiner. Allerdings kann unexpected eine Exception auslösen.


xalloc (Klasse)

Siehe auch	Portabilität

Header-Datei

except.h

Beschreibung

Mit Hilfe dieser Klasse können Fehler detektiert werden, die bei der Speicherzuweisung entstehen.

Konstruktor

xalloc::xalloc

Public-Elementfunktionen

raise

requested


xalloc::xalloc

xalloc (Klasse)

Syntax

xalloc(const string &msg, size_t size);

Beschreibung

Für die Klasse xalloc gibt es keinen Standard-Konstruktor. Bei jeder Instantiierung von xalloc muß eine Meldung definiert werden, die ausgegeben wird, wenn die angeforderte Speicherplatzzuweisung nicht ausgeführt werden konnte. Der Typ string ist in der Header-Datei cstring.h definiert.


xalloc::raise

xalloc (Klasse)

Syntax

void raise() throw(xalloc);

Beschreibung

Ein Aufruf von raise bewirkt, daß xalloc ausgelöst wird. Im Detail bedeutet dies *this.


xalloc::requested

xalloc (Klasse)

Syntax

size_t requested() const;

Beschreibung

Die Funktion gibt die Anzahl der Bytes an, deren Reservierung angefordert wurde.


xmsg (Klasse)

Siehe auch	Portabilität

Header-Datei

except.h

Beschreibung

Die Klasse dient dazu, eine Meldung auszugeben, die sich auf eine Exception bezieht.

Konstruktor

xmsg::xmsg

Public-Elementfunktionen

raise

why


xmsg::xmsg

xmsg (Klasse)

Syntax

xmsg(string msg);

Beschreibung

Für xmsg gibt es keinen Standardkonstruktor. Für jedes xmsg-Objekt muß explizit eine String-Meldung definiert sein. Der Typ string wird in der Header-Datei cstring.h definiert.


xmsg::raise

xmsg (Klasse)

Syntax

void raise() throw(xmsg);

Beschreibung

Ein Aufruf von raise bewirkt, daß eine xmsg ausgegeben wird. Es wird *this aufgerufen.


xmsg::why

xmsg (Klasse)

Syntax

const string _FAR & why() const;

Beschreibung

Die Elementfunktion bezeichnet den String, mit dem eine xmsg erzeugt wird. Da zu jeder xmsg eine explzit definierte Meldung vorhanden sein muß, sollte jede Instanz über eine eindeutige Meldung verfügen.


except.h

Die Header-Datei except.h enthält die Deklarationen und Prototypen für Exception-Funktionen und Klassen, deren Datenelemente und Mitgliedfunktionen.

Klassen

xalloc (Klasse)

xmsg (Klasse)

Funktionen

set_terminate

set_unexpected

terminate

unexpected


typeinfo.h

Die Header-Datei typeinfo.h enthält die Deklarationen und Prototypen für die Laufzeit-Typinformationsklassen, deren Datenelemente und Elementfunktionen.

Klassen

Bad_cast (Klasse)

Bad_typeid (Klasse)

typeinfo (Klasse)


O_xxxx, vordefinierte Bezeichner
O_xxxx

Header-Datei

fcntl.h

Beschreibung

Diese vordefinierten Konstanten sind Bitdefinitionen der für den Dateizugriffsmodus verwendeten Argumente.

Beim Aufruf der folgenden RTL-Funktionen zum Öffnen von Dateien verwendet man einige (nicht alle) dieser Definitionen:

 	fdopen

 	fopen

 	freopen

 	_fsopen

 	open

 	_rtl_open

 	sopen

Bei den Funktionen _dos_open und sopen werden außerdem symbolische file-sharing-Konstanten für das Argument, das den Dateizugriffsmodus bestimmt, verwendet.

Kategorie:

Konstante	Beschreibung:

Read/Write-Flags (Verwendet bei _dos_open, _rtl_open, open und sopen)

O_RDONLY   	Öffnen nur zum Lesen.

O_WRONLY   	Öffnen nur zum Schreiben.

O_RDWR     	Öffnen zum Lesen und Schreiben.

Andere Zugriffs-Flags (Verwendet bei open und sopen)

O_NDELAY	Nicht verwendet, dient der Kompatibilität zu Unix.

O_APPEND	Anhängen neuer Daten am Dateiende.

Wenn gesetzt, wird der Dateizeiger vor jedem Schreibzugriff an das Ende der Datei gesetzt.

O_CREAT	Erzeugt und öffnet eine Datei.

Hat keine Wirkung, wenn die Datei bereits existiert.

Wenn die Datei nicht existiert, wird sie erzeugt.

O_EXCL	Öffnen im Exklusivmodus, nur mit O_CREAT verwendet.

Ist die Datei bereits vorhanden, wird ein Fehler zurückgemeldet.

O_TRUNC	Öffnen mit Löschen.

Wenn die Datei bereits existiert, wird sie auf die Länge null gekürzt. Die Dateiattribute bleiben dabei unverändert.

Binärmodus/Textmodus-Flags (Verwendet bei fdopen, fopen, freopen, _fsopen, open und sopen)

O_BINARY	Keine Übersetzung. Die Datei wird explizit im Binärmodus geöffnet.

O_TEXT 	CR-LF-Übersetzung. Die Datei wird explizit im Textmodus geöffnet.

Unter DOS 3.x zusätzlich benutzbare Konstanten (Verwendet bei _rtl_open)

O_NOINHERIT	Kindprozesse "erben" die Datei nicht.

O_DENYALL	Fehler beim Öffnen zum Lesen oder Schreiben.

O_DENYWRITE	Fehler beim Öffnen zum Schreiben.

O_DENYREAD	Fehler beim Öffnen zum Lesen.

O_DENYNONE	Gemeinsamen Zugriff erlauben.

Hinweis: Bei jedem Öffnen darf nur eine der O_DENYxxx-Optionen angegeben werden. Diese Attribute für gemeinsamen Dateizugriff können zusätzlich zu einer etwa vorhandenen Dateisperre verwendet werden.

VERÄNDERN SIE KEINESFALLS die folgenden speziellen, nur zur Abfrage bestimmten Bits (werden in der DOS-Dokumentation beschrieben)!

O_CHANGED  	Spezielles DOS-Bit (nur abfragen!).

O_DEVICE   	Spezielles DOS-Bit (nur abfragen!).


SEEK_xxx, vordefinierte Bezeichner
SEEK_xxx

Siehe auch

Header-Datei

io.h

stdio.h

Beschreibung

Vordefinierte Konstanten zum Festlegen von Startpositionen bei Positionier-Operationen.

Konstante 	Wert 	Dateiposition

SEEK_SET	0	Positionierung vom Dateianfang aus.

SEEK_CUR	1	Positionierung von der aktuellen Position aus.

SEEK_END	2	Positionierung vom Dateiende aus.


SH_xxxx, vordefinierte Bezeichner
SH_xxxx

Header-Datei

share.h

Beschreibung

Konstanten für die Vorgabe des Shared-Modus beim Öffnen von Dateien werden bei _dos_open und sopen verwendet (unter DOS 3.0 oder höher).

Konstante	Bedeutung

SH_COMPAT	Wählt den Kompatibilitätsmodus.

Erlaubt weitere Öffnungsaufrufe mit SH_COMPAT. Der Aufruf schlägt fehl, falls die Datei bereits in einem anderen Shared-Modus geöffnet worden ist.

SH_DENYNONE	Erlaubt Lese- und Schreibzugriffe.

Erlaubt weitere Öffnungsaufrufe in allen Modi außer SH_COMPAT.

SH_DENYNO	Erlaubt Lese- und Schreibzugriffe (nur zu Kompatibilitätszwecken definiert).

SH_DENYRD	Verweigert Lesezugriffe. Erlaubt bei weiteren Öffnungsaufrufen nur Schreibzugriffe.

SH_DENYRW	Verweigert Lese- und Schreibzugriffe. Nur über das aktuelle Datei-Handle ist ein Zugriff möglich.

SH_DENYWR	Verweigert Schreibzugriffe. Erlaubt bei weiteren Öffnungsaufrufen nur Lesezugriffe.

O_NOINHERIT	Die Datei ist Kindprozessen nicht zugänglich.

Diese Attribute für gemeinsamen Dateizugriff können zusätzlich zu einer etwa vorhandenen Dateisperre verwendet werden.


P_xxxx, vordefinierte Bezeichner
P_xxxx

Header-Datei

process.h

Beschreibung

Konstanten für die bei den spawn-Funktionen wählbaren Modi.

Konstante	Bedeutung

P_WAIT	Kindprozeß läuft allein, Elternprozeß wartet auf dessen Beendigung.

P_DETACH	Kind- und Elternprozeß laufen gleichzeitig, wobei der Kindprozeß im Hintergrundmodus läuft.

P_NOWAIT   	Kind- und Elternprozeß laufen gleichzeitig (nicht implementiert).

P_NOWAITO   	Kind- und Elternprozeß laufen gleichzeitig; der Kindprozeß wird jedoch nicht gespeichert.

P_OVERLAY  	Kindprozeß ersetzt den Elternprozeß, der dann nicht mehr existiert.


SIG_xxx, vordefinierte Bezeichner
SIG_xxx

Siehe auch

Header-Datei

signal.h

Beschreibung

Konstanten für die vordefinierten Reaktionen auf Signale, die von raise oder durch externe Ereignisse ausgelöst werden.

Konstante	Bedeutung

SIG_DFL  	Programm beenden.

SIG_IGN  	Keine Aktion, Signal ignorieren.

SIG_ERR  	Fehlercode zurückgeben.


SIGxxxx, vordefinierte Bezeichner
SIGxxxx

Header-Datei

signal.h

Beschreibung

Konstanten für die von raise und signal verwendete Signalwerte.

Signal 	Anm. 	Bedeutung	Standardaktion

SIGABRT  	(*) 	Abnormale Beendigung.	Aufruf _exit(3)

SIGFPE     	Fehlerhafte Gleitkommaoperation.     	Aufruf _exit(1

Arithmetischer Fehler; verursacht durch

Division durch Null, ungültige Operation etc..

SIGILL   	(#) 	Unzulässiger Befehl.	Aufruf _exit(1)

SIGINT 	Unterbrechung durch Taste [Strg][C]. 	Aufruf INT 23h

SIGSEGV  	(#)	Unzulässiger Speicherzugriff.	Aufruf _exit(1)

SIGTERM  	(*) 	Anforderung zum Beenden des Programms.	Aufruf _exit(1)

(*) Signale, die mit (*) markiert sind, werden von DOS oder Borland C++  im normalen Ablauf nicht erzeugt. Sie können jedoch mit der Funktion raise generiert werden.

(#) Signale, die mit (#) markiert sind, können bei den Prozessoren 8088 oder 8086 nicht asynchron erzeugt werden, bei manchen anderen Prozessoren ist dies jedoch möglich (siehe signal für weitere Einzelheiten).


stdaux, stderr, stdin, stdout und stdprn
stdaux, stderr, stdin, stdout, and stdprn

Header-Datei

stdio.h

Beschreibung

Vordefinierte Streams, die beim Programmstart automatisch geöffnet werden.

Name  	Bedeutung

stdin   	Standardeingabegerät.

stdout  	Standardausgabegerät.

stderr  	Standard-Fehlerausgabegerät.

stdaux  	Alternatives Standardausgabegerät.

stdprn  	Standarddrucker.


S_Ixxxx, vordefinierte Bezeichner
S_Ixxxx

Header-Datei

sys\stat.h

Beschreibung

Definitionen für Dateistatus- und Verzeichnisfunktionen.

Name	Bedeutung

S_IFMT  	Maske für Dateityp.

S_IFDIR   	Verzeichnis.

S_IFIFO   	FIFO-Gerät.

S_IFCHR   	Zeichenweise arbeitendes Gerät.

S_IFBLK   	Blockweise arbeitendes Gerät.

S_IFREG   	Reguläre Datei.

S_IREAD   	Eigentümer darf lesen.

S_IWRITE  	Eigentümer darf schreiben.

S_IEXEC   	Eigentümer darf ausführen.


NULL, vordefinierter Bezeichner
NULL

Header-Datei

stddef.h

Beschreibung

Nullzeiger-Konstante, die mit beliebigen anderen Zeigern auf Datenobjekte, nicht jedoch mit Funktionszeigern, kompatibel ist. Wenn ein Zeiger NULL entspricht, zeigt er nicht auf ein im Programm definiertes Datenobjekt.


Bit-Definitionen für fnsplit

Header-Datei

dir.h

Beschreibung

Diese vordefinierten Konstanten sind Bit-Definitionen der Rückgabewerte der Funktion fnsplit, sie geben an, welche Teile einer Dateispezifikation die Funktion beim Aufteilen gefunden hat.

Flag	Komponente

DIRECTORY   	Pfadangabe enthält ein Verzeichnis (und möglicherweise Unterverzeichnisse).

DRIVE     	Pfadangabe enthält eine Laufwerksbezeichnung (siehe DIR.H).

EXTENSION  	Pfadangabe enthält eine Namenserweiterung.

FILENAME  	Pfadangabe enthält einen Dateinamen.

WILDCARDS   	Pfadangabe enthält Jokerzeichen (* oder ?).


MAXxxxx, vordefinierte Bezeichner (fnsplit)
MAXxxxx

Header-Datei

dir.h

Beschreibung

Diese Symbole definieren die maximale Anzahl von Zeichen in einer Dateispezifikation für fnsplit (einschließlich eines abschließenden Nullzeichens).

Name	Bedeutung

MAXPATH   	Vollständiger Dateiname mit Pfad.

MAXDRIVE  	Laufwerksangabe (z.B. "A:").

MAXDIR  	Unterverzeichnisangabe.

MAXFILE   	Dateiname ohne Namenserweiterung.

MAXEXT  	Namenserweiterung.


_F_xxxx, vordefinierte Bezeichner
_F_xxxx

Header-Datei

stdio.h

Beschreibung

Dateistatus-Flags bei Streams.

Name	Bedeutung

_F_RDWR  	Lesen und Schreiben erlaubt.

_F_READ  	Nur Lesen erlaubt.

_F_WRIT  	Nur Schreiben erlaubt.

_F_BUF   	Dynamisch reservierter Datenpufferbereich.

_F_LBUF  	Zeilenweise gepufferte Datei.

_F_ERR   	Fehler-Flag.

_F_EOF   	EOF-Flag (Dateiende).

_F_BIN   	Binär-Flag.

_F_IN  	Dateneingabe aktiv.

_F_OUT   	Datenausgabe aktiv.

_F_TERM  	Datei ist ein Terminal.


FA_xxxx, vordefinierte Bezeichner
FA_xxxx

Header-Datei

dos.h

Beschreibung

Dateiattribute von DOS.

Konstante	Bedeutung

FA_RDONLY  	Schreibgeschützte Datei.

FA_HIDDEN  	Verborgene Datei.

FA_SYSTEM  	Systemdatei.

FA_LABEL   	Datenträgerbezeichnung.

FA_DIREC   	Verzeichnis.

FA_ARCH  	Archiv.

Weitere Informationen über diese Attribute entnehmen Sie bitte Ihrer DOS-Dokumentation.


EXIT_xxxx, vordefinierte Bezeichner
EXIT_xxxx

Header-Datei

stdlib.h

Beschreibung

Konstanten zur Definition von Beendigungs-Codes für den Aufruf der Funktion exit.

Name      	Bedeutung

EXIT_SUCCESS	Normales Programmende.

EXIT_FAILURE	Abnormales Programmende.


_IOxxx, vordefinierte Bezeichner
_IOxxx

Siehe auch

Header-Datei

stdio.h

Beschreibung

Konstanten zur Festlegung der Pufferungsstrategie einer Datei.

Name	Bedeutung

_IOFBF  	Volle Pufferung. Wenn der Puffer leer ist, versucht die nächste Eingabeoperation, ihn vollständig zu füllen.

       	Bei der Ausgabe wird der Puffer vollständig gefüllt, bevor Daten in die Datei geschrieben werden.

_IOLBF  	Zeilenpufferung. Wenn der Puffer leer ist, versucht die nächste Eingabeoperation, ihn vollständig zu füllen.

      	Bei der Ausgabe wird der Puffer dagegen immer dann geleert, wenn ein Zeilenvorschub-Zeichen ausgegeben wird.

_IONBF  	Keine Pufferung. Die Parameter buf und size werden ignoriert. Bei jeder Eingabeoperation wird direkt aus der Datei gelesen, bei jeder Ausgabeoperation sofort in die Datei geschrieben.


BUFSIZ, vordefinierter Bezeichner
BUFSIZ

Header-Datei

stdio.h

Beschreibung

Definiert die standardmäßige Puffergröße, mit der die Funktion setbuf arbeitet.


EOF, vordefinierter Bezeichner
EOF

Header-Datei

stdio.h

Beschreibung

Diese Konstante zeigt an, daß das Dateiende erreicht wurde.


_IS_xxx, vordefinierte Bezeichner
_IS_xxx

Header-Datei

ctype.h

Beschreibung

Bitwerte in _ctype[], verwendet von den Zeichentypmakros (Makronamen is...).

Name	Bedeutung

_IS_SP	Leerzeichen

_IS_DIG	Zeichen

_IS_UPP	Großbuchstabe

_IS_LOW	Kleinbuchstabe

_IS_HEX	[A-F] oder [a-f].

_IS_CTL	Steuerzeichen

_IS_PUN	Interpunktion


CHAR_xxx, vordefinierte Bezeichner
CHAR_xxx

Header-Datei

limits.h

Beschreibung

Name	Bedeutung

CHAR_BIT  	Anzahl der Bits des Typs char.

CHAR_MAX  	Maximaler Wert des Typs char.

CHAR_MIN  	Minimaler Wert des Typs char.

Diese Werte sind unabhängig davon, ob der Typ char in der Voreinstellung als signed oder unsigned definiert ist.


SCHAR_xxx, vordefinierte Bezeichner
SCHAR_xxx

Header-Datei

limits.h

Beschreibung

Name	Bedeutung

SCHAR_MAX  	Maximaler Wert des Typs char.

SCHAR_MIN  	Minimaler Wert des Typs char.


Uxxxx_MAX, vordefinierte Bezeichner
Uxxxx_MAX

Header-Datei

limits.h

Beschreibung

Name	Maximaler Wert für den Typ

UCHAR_MAX  	unsigned char.

USHRT_MAX  	unsigned short.

UINT_MAX   	unsigned int.

ULONG_MAX  	unsigned long.


SHRT_xxx, vordefinierte Bezeichner
SHRT_xxx

Header-Datei

limits.h

Beschreibung

Name	Bedeutung

SHRT_MAX  	Maximaler Wert für den Typ short.

SHRT_MIN  	Minimaler Wert für den Typ short.


INT_xxx, vordefinierte Bezeichner
INT_xxx

Header-Datei

limits.h

Beschreibung

Maximaler und minimaler Wert für den Typ int.

Name	Bedeutung

INT_MAX   	Maximaler Wert für den Typ int.

INT_MIN   	Minimaler Wert für den Typ int.


LONG_xxx, vordefinierte Bezeichner
LONG_xxx

Header-Datei

limits.h

Beschreibung

Maximaler und minimaler Wert für den Typ long.

Name	Bedeutung

LONG_MAX  	Maximaler Wert für den Typ long.

LONG_MIN  	Minimaler Wert für den Typ long.


CW_DEFAULT, vordefinierter Bezeichner
CW_DEFAULT

Header-Datei

float.h

Beschreibung

Voreingestelltes Steuerwort für den mathematischen Koprozessor 8087 oder 80287.


EDOM, ERANGE, HUGE_VAL, vordefinierte Bezeichner
EDOM, ERANGE, HUGE_VAL

Header-Datei

errno.h

math.h

Beschreibung

Name    	Bedeutung

EDOM    	Fehlercode: Argument nicht im zulässigen Bereich.

ERANGE  	Fehlercode: Ergebnis nicht im zulässigen Bereich.

HUGE_VAL  	Größtmöglicher darstellbarer double-Wert (wird von mathematischen Funktionen zurückgegeben,  falls das Ergebnis größer ist).


NDEBUG, vordefinierter Bezeichner
NDEBUG

Header-Datei

assert.h

Beschreibung

Mit Hilfe von NDEBUG kann man im Anwenderprogramm wählen, ob der Bezeichner assert für ein Makro oder für eine echte Funktion steht.

Ist NDEBUG definiert, so ist assert eine Funktion,  andernfalls ein Makro.


NFDS, vordefinierter Bezeichner
NFDS

Header-Datei

dos.h

Beschreibung

Maximale Anzahl von Dateideskriptoren.


MAXxxxx, vordefinierte Bezeichner (Integer-Typen)
MAXxxxx

Header-Datei

values.h

Beschreibung

Maximalwerte für Ganzzahl-Datentypen.

Name    	Bedeutung

MAXSHORT  	Größter Wert für den Typ short.

MAXINT  	Größter Wert für den Typ int.

MAXLONG  	Größter Wert für den Typ long.


M_E, M_LOGxxx, M_LNxx, vordefinierte Bezeichner
M_E, M_LOGxxx, M_LNxx

Header-Datei

math.h

Beschreibung

Konstanten für logarithmische Funktionen.

Name    	Bedeutung

M_E     	e (Eulersche Zahl, 2,71...).

M_LOG2E   	log(e).

M_LOG10E  	log10(e).

M_LN2   	ln(2).

M_LN10  	ln(10).


PI-Konstanten

Header-Datei

math.h

Beschreibung

Konstante Pi (Ludolfsche Zahl, 3,14...) und davon abgeleitete Konstanten.

Name	Bedeutung

M_PI     	Pi

M_PI_2    	Pi/2

M_PI_4    	Pi/4

M_1_PI    	1/Pi

M_2_PI    	2/Pi

M_1_SQRTPI  	1/Wurzel(Pi)

M_2_SQRTPI  	2/Wurzel(Pi)


M_SQRTxx, vordefinierte Bezeichner
M_SQRTxxx

Header-Datei

math.h

Beschreibung

Konstante "Quadratwurzel aus 2" und abgeleitete Konstanten.

Name	Bedeutung

M_SQRT2	Wurzel(2).

M_SQRT_2	1/2 * Wurzel(2).


L_ctermid, vordefinierter Bezeichner
L_ctermid

Header-Datei

stdio.h

Beschreibung

Länge eines Geräte-ID-Strings.


L_tmpnam, vordefinierter Bezeichner
L_tmpnam

Header-Datei

stdio.h

Beschreibung

Größe eines Arrays, das den Namen (String) einer temporären Datei aufnehmen kann.


TMP_MAX, vordefinierter Bezeichner
TMP_MAX

Header-Datei

stdio.h

Beschreibung

Maximale Anzahl von eindeutigen Dateinamen.


OPEN_MAX, vordefinierter Bezeichner
OPEN

Header-Datei

stdio.h

Beschreibung

Maximale Anzahl von Dateien, die gleichzeitig geöffnet sein können.

Name	Bedeutung

FOPEN_MAX	Maximale Anzahl von Dateien pro Prozeß.

SYS_OPEN   	Maximale Anzahl von Dateien im gesamten System.


HANDLE_MAX, vordefinierter Bezeichner
HANDLE_MAX

Header-Datei

io.h

Beschreibung

Maximale Anzahl von Handles.


RAND_MAX, vordefinierter Bezeichner
RAND_MAX

Header-Datei

stdlib.h

Syntax

Beschreibung

Maximaler von der Funktion rand zurückgegebener Wert.


BITSPERBYTE, vordefinierter Bezeichner
BITSPERBYTE

Header-Datei

values.h

Beschreibung

Anzahl der Bits, die ein Byte bilden.


Grenzwerte für die Datentypen float und double

Header-Datei

values.h

Beschreibung

Kompatibel zu UNIX System V:

_LENBASE  	Basis für Exponenten.

Grenzwerte für den Typ double:

_DEXPLEN  	Anzahl der Bits im Exponenten.

DMAXEXP   	Größter zulässiger Exponent.

DMAXPOWTWO  	Höchste zulässige Zweierpotenz.

DMINEXP   	Kleinster zulässiger Exponent.

DSIGNIF   	Anzahl der signifikanten Bits.

MAXDOUBLE   	Größter Wert für den Typ double.

MINDOUBLE   	Kleinster Wert für den Typ double.

Grenzwerte für den Typ float:

_FEXPLEN  	Anzahl der Bits im Exponenten.

FMAXEXP   	Größter zulässiger Exponent.

FMAXPOWTWO  	Höchste zulässige Zweierpotenz.

FMINEXP   	Kleinster zulässiger Exponent.

FSIGNIF   	Anzahl der signifikanten Bits.

MAXFLOAT  	Größter Wert für den Typ float.

MINFLOAT  	Kleinster Wert für den Typ float.


HIBITx, vordefinierte Bezeichner
HIBITxxx

Header-Datei

values.h

Beschreibung

Konstanten zur Maskierung des höchstwertigen Bits (Vorzeichenbit) bei den standardmäßigen Ganzzahltypen.

Name  	Bedeutung

HIBITS   	Für Typ short.

HIBITI     	Für Typ int.

HIBITL   	Für Typ long.


Fehlernummern in errno

Header-Datei

errno.h

Beschreibung

Die folgende Tabelle zeigt die mnemonischen Bezeichnungen und die Bedeutungen der in der Variablen errno gespeicherten Fehlercodes.

Jeder der aufgeführten Werte kann als Index für das Array sys_errlist benutzt werden, wenn Klartextmeldungen ausgegeben werden sollen.

Alternativ kann man auch die Funktion perror zur Ausgabe von Meldungen verwenden.

Mnemonische
Bezeichnung 	Bedeutung

EZERO	Fehler 0.

EINVFNC 	Ungültige Funktionsnummer.

ENOFILE  	Datei nicht gefunden.

ENOPATH  	Pfad nicht gefunden.

ECONTR 	Speicherblöcke zerstört.

EINVMEM  	Ungültige Speicherblockadresse.

EINVENV 	Ungültige Umgebung.

EINVFMT	Ungültiges Format.

EINVACC	Ungültiger Zugriffscode.

EINVDAT	Ungültige Daten.

EINVDRV	Ungültige Laufwerksangabe.

ECURDIR 	Versuch, das aktuelle Verzeichnis zu löschen.

ENOTSAM	Nicht das gleiche Gerät.

ENMFILE	Keine weiteren Dateien mehr.

ENOENT 	Datei oder Verzeichnis existiert nicht.

EMFILE	Zu viele geöffnete Dateien.

EACCES 	Zugriff verweigert.

EBADF 	Ungültiges Datei-Handle.

ENOMEM 	Zu wenig Speicher.

ENODEV  	Gerät existiert nicht.

EINVAL 	Ungültiges Argument.

E2BIG  	Argumentliste ist zu lang.

ENOEXEC	Fehler beim Exec-Format.

EXDEV  	Kreuzverbindung von Geräten.

EDOM  	Unzulässiges Argument für eine mathematische Funktion.

ERANGE 	Ergebnis außerhalb des darstellbaren Bereichs.

EFAULT 	Unbekannter Fehler.

EEXIST  	Datei existiert bereits.


Internationale API (Überblick)

Siehe auch

C++Builder unterstützt die Entwicklung internationaler Anwendungen. Die C++Builder-Laufzeitbibliothek umfaßt nun Erweiterungen vieler Einzel-Byte-Routinen. Mit Hilfe dieser Erweiterungen lassen sich Anwendungen entwickeln, die Multibyte- oder Unicode-Typen verarbeiten können.


International API-Routinen
Internationale API-Routinen

Siehe auch

Zugunsten größtmöglicher Portierbarkeit enthält C++Builder ein portierbares Makro für Multibyte- oder Unicode-Routinen, das ein Umschreiben des Quelltextes überflüssig macht. Wenn Sie die portierbaren Makros einsetzen, können Sie erneut compilieren und eines der folgenden Makros definieren:.

_MBCS	Ermöglicht Multibyte-Routinen

_UNICODE	Ermöglicht Routinen mit erweiterten Zeichen

Ist kein Makro definiert, werden die Single-Byte-Routinen verwendet.

Die folgende Tabelle enthält eine Liste der Routinen, die für internationale Anwendungen verfügbar sind. Die Spalte Unterstützte Unicode-Plattform zeigt, welche Funktionen unter Windows NT nicht unterstützt werden. Einige Unicode-Funktionen existieren als Makros. Solche Makroversionen werden standardmäßig verwendet, falls vorhanden. Um die Funktionsversion der Routine zu erhalten, muß die Makrodefinition aufgehoben werden.

Single-Byte	Portierbares Makro	Multi-Byte	Unicode	Unterstützte Unicode-Plattform
	_istlegal	_ismbclegal	-	Win 95, NT
	_istlead	_ismbblead	-	Win 95, NT
	_isleadbyte	_ismbblead	-	Win 95, NT
_argv	_targv		_wargv	Win NT
_atoi64	_ttoi64		_wtoi64	Win 95, NT
_atold	_ttold		_wtold	Win 95, NT
closedir	_tclosedir		wclosedir	WIN NT
_environ	_tenviron		_wenviron	Win NT
_fdopen	_tfdopen		_wfdopen	Win 95, NT
_fsopen	_tfsopen		_wfsopen	Win NT
_fullpath	_tfullpath		_wfullpath	Win NT
_getdcwd	_tgetdcwd		_wgetdcwd	Win NT
_i64toa	_i64tot		_i64tow	Win 95, NT
_makepath	_tmakepath		_wmakepath	Win 95, NT
_popen	_tpopen		_wpopen	Win NT
readdir	_treaddir		wreaddir	WIN NT
_rtl_chmod	_trtl_chmod		_wrtl_chmod	Win NT
_rtl_creat	_trtl_creat		_wrtl_creat	Win NT
_rtl_open	_trtl_open		_wrtl_open	Win NT
_searchenv	_tsearchenv		_wsearchenv	Win NT
_searchstr	_tsearchstr		_wsearchstr	Win NT
_snprintf	_sntprintf		_snwprintf	Win 95, NT
_splitpath	_tsplitpath		_wsplitpath	Win 95, NT
_strdate	_tstrdate		_wstrdate	Win 95, NT
_strdec	_tcsdec	_mbsdec	_wcsdec	Win 95, NT
_stricoll	_tcsicoll	_mbsicoll	_wcsicoll	Win 95, NT
_strinc	_tcsinc	_mbsinc	_wcsinc	Win 95, NT
_strncnt	_tcsnbcnt	_mbsnbcnt	_wcsncnt	Win 95, NT
_strncoll	_tcsnccoll	_mbsncoll	_wcsncoll	Win 95, NT
_strncoll	_tcsncoll	_mbsnbcoll	_wcsncoll	Win 95, NT
_strnextc	_tcsnextc	_mbsnextc	_wcsnextc	Win 95, NT
_strnicoll	_tcsncicoll	_mbsnbicoll	_wcsnicoll	Win 95, NT
_strnicoll	_tcsnicoll	_mbsnbicoll	_wcsnicoll	Win 95, NT
_strninc	_tcsninc	_mbsninc	_wcsninc	Win 95, NT
_strspnp	_tcsspnp	_mbsspnp	_wcsspnp	Win 95, NT
_strtime	_tstrtime		_wstrtime	Win 95, NT
_strtold	_tcstold		_wcstold	Win 95, NT
_tzname	_ttzname		_wtzname	Win NT
_ui64toa	_ui64tot		_ui64tow	Win 95, NT
access	_taccess		_waccess	Win NT
asctime	_tasctime		_wasctime	Win 95, NT
atof	_ttof		_wtof	Win 95, NT
atoi	_ttoi		_wtoi	Win 95, NT
atol	_ttol		_wtol	Win 95, NT
chdir	_tchdir		_wchdir	Win NT
chmod	_tchmod		_wchmod	Win NT
creat	_tcreat		_wcreat	Win NT
ctime	_tctime		_wctime	Win 95, NT
execl	_texecl		_wexecl	Win NT
execle	_texecle		_wexecle	Win NT
execlp	_texeclp		_wexeclp	Win NT
execlpe	_texeclpe		_wexeclpe	Win NT
execv	_texecv		_wexecv	Win NT
execve	_texecve		_wexecve	Win NT
execvp	_texecvp		_wexecvp	Win NT
execvpe	_texecvpe		_wexecvpe	Win NT
fgetc	_fgettc		fgetwc	Win 95, NT
_fgetchar	_fgettchar		_fgetwchar	Win 95, NT
fgets	_fgetts		fgetws	Win 95, NT
findfirst	_tfindfirst		_wfindfirst	Win NT
findnext	_tfindnext		_wfindnext	Win NT
fnmerge	_tfnmerge		_wfnmerge	Win NT
fnsplit	_tfnsplit		_wfnsplit	Win NT
fopen	_tfopen		_wfopen	Win NT
fprintf	_ftprintf		fwprintf	Win 95, NT
fputc	_fputtc		fputwc	Win 95, NT
_fputchar	_fputtchar		_fputwchar	Win 95, NT
fputs	_fputts		fputws	Win 95, NT
freopen	_tfreopen		_wfreopen	Win NT
getc	_gettc		getwc	Win 95, NT
getchar	_gettchar		getwchar	Win 95, NT
getcurdir	_tgetcurdir		_wgetcurdir	Win NT
getcwd	_tgetcwd		_wgetcwd	Win NT
getenv	_tgetenv		_wgetenv	Win 95, NT
gets	_getts		_getws	Win 95, NT
isalnum	_istalnum	_ismbcalnum	iswalnum	Win 95, NT
isalpha	_istalpha	_ismbcalpha	iswalpha	Win 95, NT
isascii	_istascii		iswascii	Win 95, NT
iscntrl	_istntrl		iswcntrl	Win 95, NT
isdigit	_istdigit	_ismbcdigit	iswdigit	Win 95, NT
isgraph	_istgraph	_ismbcgraph	iswgraph	Win 95, NT
islower	_istlower	_ismbclower	iswlower	Win 95, NT
isprint	_istprint	_ismbcprint	iswprint	Win 95, NT
ispunct	_istpunct	_ismbcpunct	iswpunct	Win 95, NT
isspace	_istspace	_ismbcspace	iswspace	Win 95, NT
isupper	_istupper	_ismbcupper	iswupper	Win 95, NT
isxdigit	_istxdigit		iswxdigit	Win 95, NT
ltoa	_ltot		_ltow	Win 95, NT
main	_tmain		wmain	Win NT
memchr	_tmemchr		_wmemchr	Win 95, NT
memcpy	_tmemcpy		_wmemcpy	Win 95, NT
memset	_tmemset		_wmemset	Win 95, NT
mkdir	_tmkdir		_wmkdir	Win NT
_mktemp	_tmktemp		_wmktemp	Win 95, NT
open	_topen		_wopen	Win NT
opendir	_topendir		wopendir	WIN NT
perror	_tperror		_wperror	Win 95, NT
printf	_tprintf		wprintf	Win 95, NT
putc	_puttc		putwc	Win 95, NT
putchar	_puttchar		putwchar	Win 95, NT
putenv	_tputenv		_wputenv	Win NT
puts	_putts		_putws	Win 95, NT
remove	_tremove		wremove	Win NT
rename	_trename		_wrename	Win NT
rewinddir	_trewinddir		wrewinddir	WIN NT
_rmdir	_trmdir		_wrmdir	Win NT
scanf	_tscanf		wscanf	Win 95, NT
searchpath	_tsearchpath		wsearchpath	Win NT
setlocale	_tsetlocale		_wsetlocale	Win 95, NT
_sopen	_tsopen		_wsopen	Win 95, NT
spawnl	_tspawnl		_wspawnl	Win NT
spawnle	_tspawnle		_wspawnle	Win NT
spawnlp	_tspawnlp		_wspawnlp	Win NT
spawnlpe	_tspawnlpe		_wspawnlpe	Win NT
spawnv	_tspawnv		_wspawnv	Win NT
spawnve	_spawnve		_wspawnve	Win NT
spawnvp	_tspawnvp		_wspawnvp	Win NT
spawnvpe	_tspawnvpe		_wspawnvpe	Win NT
sprintf	_stprintf		swprintf	Win 95, NT
sscanf	_stsscanf		swscanf	Win 95, NT
stat	_tstat		_wstat	Win NT
_stpcpy	_tcspcpy		_wcspcpy	Win 95, NT
strcat	_tcscat	_mbscat	wcscat	Win 95, NT
strchr	_tcschr	_mbschr	wcschr	Win 95, NT
strcmp	_tcscmp	_mbscmp	wcscmp	Win 95, NT
strcmpi	_tcscmpi	_mbsicmp	_wcscmpi	Win 95, NT
strcoll	_tcscoll	_mbscoll	wcscoll	Win 95, NT
strcpy	_tcscpy	_mbscpy	wcscpy	Win 95, NT
strcspn	_tcscspn	_mbscspn	wcscspn	Win 95, NT
strdup	_tcsdup	_mbsdup	_wcsdup	Win 95, NT
strftime	_tcsftime		wcsftime	Win 95, NT
_stricmp	_stricmp	_mbsicmp	_wcsicmp	Win 95, NT
strlen	_tcslen	_mbslen	wcslen	Win 95, NT
strlen	_tcsclen	_mbslen	wcslen	Win 95, NT
strlwr	_tcslwr	_mbslwr	_wcslwr	Win 95, NT
strncat	_tcsncat	_mbsnbcat	wcsncat	Win 95, NT
strncat	_tcsnccat	_mbsncat	wcsncat	Win 95, NT
strncmp	_tcsnccmp	_mbsncmp	wcsncmp	Win 95, NT
strncmp	_tcsncmp	_mbsnbcmp	wcsncmp	Win 95, NT
strncmpi	_tcsncmpi		wcsncmpi	Win 95, NT
strncnt	_tcsnccnt	__mbsncnt	_wcsncnt	Win 95, NT
strncnt	_tcsnbcnt	_mbsnbcnt	_wcsncnt	Win 95, NT
strncpy	_tcsncpy	_mbsnbcpy	wcsncpy	Win 95, NT
strncpy	_tcsnccpy	_mbsncpy	wcsncpy	Win 95, NT
strnicmp	_tcsncicmp	_mbsnicmp	_wcsnicmp	Win 95, NT
strnicmp	_tcsnicmp	_mbsnbicmp	wcsnicmp	Win 95, NT
strnset	_tcsnset	_mbsnbset	_wcsnset	Win 95, NT
strnset	_tcsncset	_mbsnset	_wcsnset	Win 95, NT
strpbrk	_tcspbrk	_mbspbr	wcspbrk	Win 95, NT
strrchr	_tcsrchr	_mbsrchr	wcsrchr	Win 95, NT
strrev	_tcsrev	_mbsrev	_wcsrev	Win 95, NT
strset	_tcsset	_mbsset	_wcsset	Win 95, NT
strspn	_tcsspn	_mbsspn	wcsspn	Win 95, NT
strstr	_tcsstr	_mbsstr	wcsstr	Win 95, NT
strtod	_tcstod		wcstod	Win 95, NT
strtok	_tcstok	_mbstok	wcstok	Win 95, NT
strtol	_tcstol		wcstol	Win 95, NT
strtoul	_tcstoul		_wcstoul	Win 95, NT
strupr	_tcsupr	_mbsupr	_wcsupr	Win 95, NT
strxfrm	_tcsxfrm		wcsxfrm	Win 95, NT
system	_tsystem		_wsystem	Win NT
_tempnam	_ttempnam		_wtempnam	Win 95, NT
tmpnam	_ttmpnam		_wtmpnam	Win 95, NT
tolower	_totlower	_mbctolower	towlower	Win 95, NT
toupper	_totupper	_mbctoupper	towupper	Win 95, NT
tzset	_ttzset		_wtzset	Win 95, NT
ultoa	_ultot		_ultow	Win 95, NT
ungetc	_ungettc		ungetwc	Win 95, NT
_unlink	_tunlink		_wunlink	Win NT
_utime	_tutime		_wutime	Win 95, NT
vfprintf	_vftprintf		vfwprintf	Win 95, NT
vprintf	_vtprintf		vwprintf	Win 95, NT
vsprintf	_vstprintf		vswprintf	Win 95, NT
WinMain	_tWinMain		wWinMain	Win NT


Unicode-Makros

Siehe auch

Standardmäßig sind diese Unicode-Routinen als Makro verfügbar. Um die Funktionsversion zu erhalten, muß die Makrodefinition aufgehoben werden.

iswalpha

iswascii

iswcntrl

iswdigit

iswgraph

iswlower

iswprint

iswpunct

iswspace

iswupper

iswxdigit


Formatierte E/A in der Internationalen API

Siehe auch

Einige Funktionen der Laufzeitbibliothek liegen jetzt in einer Version vor, die Wide-Strings (wchar_t*) anstatt Narrow-Strings (char*) entgegennimmt. Die Namen unterscheiden sich durch ein vorangestelltes w. Beispielsweise gibt es jetzt nicht nur printf und scanf, sondern auch wprintf und wscanf als Gegenstücke für Wide-Strings. Die Datei TCHAR.H enthält #define-Namen, die entweder auf die Narrow-Versionen (für normale ANSI-char-Typen) oder die Wide-Versionen (für Unicode) verweisen. Maßgebend ist die Einstellung des Makros _UNICODE.

Die Standardfunktionen arbeiten mit regulären Strings und die Wide-Versionen mit Wide-Strings. Die Gruppe der printf- und scanf-Funktionen ermöglicht die Ein- und Ausgabe von Strings mit ähnlicher oder gegensätzlicher Breite. Hierfür gibt es einige neue Formatkonvertierungszeichen und -Präfixe.

Die Narrow-Versionen der Funktionen nehmen Narrow-Strings als Parameter entgegen und verarbeiten diese. Die Wide-Versionen arbeiten mit Wide-Strings und -Zeichen.

Hinweis: Die großgeschriebene Version von %s und %c (%S und %C) bedeutet: "Verwende das Gegenteil der Breite, die für die aufgerufene Funktion als Standard gilt." Das bedeutet, daß ein %S in wprintf eine Ausgabe in einen Narrow-String bewirkt.

Demnach setzen %l und %h die Breite entweder auf lang (Wide) oder kurz (Narrow).


Funktionen für formatierte Ein-/Ausgabe

Siehe auch

Hier finden Sie einen Überblick der Funktionsgruppe printf und scanf.

ANSI-Funktion	Unicode-Funktion	Beschreibung
cprintf	{Keine}	Konsolenausgabe
cscanf	{Keine}	Konsoleneingabe
fprintf	fwprintf	FILE * Stream-Ausgabe
fscanf	fwscanf	FILE * Stream-Eingabe
printf	wprintf	STDOUT Ausgabe
scanf	wscanf	STDIN Eingabe
sprintf	swprintf	String-/Speicherausgabe
sscanf	swscanf	String-/Speichereingabe
vfprintf	vfwprintf	VA_LIST FILE* Stream-Ausgabe
vfscanf	vfwscanf	VA_LIST FILE* Stream-Eingabe
vprintf	vwprintf	VA_LIST STDOUT Ausgabe
vscanf	vwscanf	VA_LIST STDIN Eingabe


Formatbezeichner für Unicode-Ausgaben

Siehe auch

Die folgende Tabelle enthält die Formatbezeichner, die für Unicode-Ausgabefunktionen vorgesehen sind. Sie finden eine Gegenüberstellung, wie der Formatbezeichner von printf und den Unicode-Ausgabefunktionen verwendet wird, um Strings und Zeichen darzustellen.

Bezeichner	printf	Unicode-Funktion
%c	narrow	wide
%C	wide	narrow
%hc	narrow	narrow
%hC	narrow	narrow
%lc	wide	wide
%lC	wide	wide
%s	narrow	wide
%S	wide	narrow
%hs	narrow	narrow
%hS	narrow	narrow
%ls	wide	wide
%lS	wide	wide


Unicode-Ausgabefunktionen

Die Gruppe der Unicode-Ausgabefunktionen setzt sich folgendermaßen zusammen:

_snprintf

fprintf

sprintf

vfprintf

vprintf

vsprintf

_snprintf

fwprintf

swprintf

vfwprintf

vwprintf

vswprintf


Formatbezeichner für Unicode-Eingaben

Siehe auch

Die folgende Tabelle enthält die Formatbezeichner, die für Unicode-Ausgabefunktionen vorgesehen sind. Sie finden eine Gegenüberstellung, wie der Formatbezeichner von scanf und den Unicode-Eingabefunktionen zum Einlesen von Strings und Zeichen verwendet wird.

Bezeichner	scanf	Unicode-Funktion
%c	narrow	wide
%C	wide	narrow
%hc	narrow	narrow
%hC	narrow	narrow
%lc	wide	wide
%lC	wide	wide
%s	narrow	wide
%S	wide	narrow
%hs	narrow	narrow
%hS	narrow	narrow
%ls	wide	wide
%lS	wide	wide


Unicode-Ausgabefunktionen
Unicode-Eingabefunktionen

Die Gruppe der Unicode-Eingabefunktionen setzt sich folgendermaßen zusammen.

sscanf

swscanf


Formatierte Ein- und Ausgabe für erweiterte Typen

Siehe auch

Die folgende Tabelle enthält neue Formatbezeichner, die in C++Builder für die Funktionen der Familie printf und scanf implementiert sind. Damit wird die Ein- und Ausgabe von 64-Bit-Integern möglich. Außerdem erhält man größere E/A-Flexibilität für andere Typen.

Formatbezeichner	Funktion
%Ld	__int64
%I8d	8-Bit-Integer (char)
%I16d	16-Bit-Integer (short)
%I32d	32-Bit-Integer (long)
%I64d	64-Bit-Integer (__int64)

Beachten Sie, daß in dieser Tabelle das Format %d als Beispiel verwendet wird. Die Präfixe I8, I16, I32, I64 können mit den Formaten d, i, o, x, X ebenso verwendet werden wie mit dem neuen Präfix L, daß bisher nur für float erlaubt war, um den Typ long double zu identifizieren.